Redux在处理庞大Store并频繁进行更新操作时的性能

Q:当你拥有一个相当大的 SPA 拥有许多状态,因为有很多页面,模块,子模块和许多元素。所有子状态都关联 App 中不同的关注点,子状态由它们自己的 reducer 处理。但是当进行非常频繁的更新操作,所有的 reducer 都将被调用。

当拥有一个如下的 store:

store: {
  subStore1: {
    subSubstore1: {}
    ...
    subSubstore10: {}
  },
subStore2: {
    subSubstore1: {}
    ...
    subSubstore10: {}
  }
...
subStore10: {
    subSubstore1: {}
    ...
    subSubstore10: {}
  }
}

dispatch 一个更新 substore2: { subStore6 } 的 action。

为什么不简单地复制指针 substore1、substore3、... substore9,而现在是调用其他子 store 的 reducer?

 

A:可以使用 redux-ignore https://github.com/omnidan/redux-ignore

 

Redux Store 中只有一个 reducer 函数。你可以分解该函数,并根据你的需求来权衡便利、速度或其他因素。combineReducers 是处理此问题的常用方法,但并不是必需的。

 

如何处理那些已订阅状态变化的组件?

使用 react-redux。由 React-Redux 的 connect() 函数生成的包装组件会进行多次检查,以尽量减少实际组件重渲染(re-render)。这包括 shouldComponentUpdate 的默认实现,并对进入组件的 props 进行浅检查(包括从 mapStateToProps 返回的内容)。所以一般情况下,被 connect 的组件只有在状态值发生变化时才会重渲染。

 

参考:https://github.com/reduxjs/redux/issues/1303

转载于:https://www.cnblogs.com/SyMind/p/10228359.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值