Redux中的React ReRender

时间:2016-04-23 19:07:52

标签: javascript performance reactjs redux rerender

我在我的React应用程序中使用Redux,并且确保我不改变状态但返回新状态我在开发中添加了中间件https://github.com/leoasis/redux-immutable-state-invariant

我的问题是,当商店发生变化时,我的所有组件都会重新渲染吗?

我正在观看有关ImmutableJs的视频https://youtu.be/YFP8lbdZ0cs?t=33m59s现在我不知道是否应该在每个具有shallowEqual功能的组件中实现shouldComponentUpdate,或者这个事情是通过自动反应完成的? (也许它在新版本中有所改变)

它应该困扰我吗?当我不使用ImutableJs并使用最新的React和Redux版本时,最好的方法是什么?

2 个答案:

答案 0 :(得分:4)

React Redux包做了很多工作,以确保您的包装组件只在需要时呈现。请参阅http://redux.js.org/docs/FAQ.html#react-rendering-too-often上相关的Redux常见问题解答。我的React rendering debugging tools中还列出了一些Redux-related libraries catalog,可以显示您的组件实际重新渲染的时间以及原因。

也就是说,在您有证据表明您遇到实际的性能问题之前,通常不应该担心它。

答案 1 :(得分:2)

在我回答你的问题之前,我想澄清一些你理解的事情,

  • 不变性如何影响react-redux

考虑到你有一个处于redux状态的对象,并且你没有处理不变性并且你改变了一个属性。现在你改变了一个属性,所以你希望它重新渲染,但由于对象引用没有更新(因为状态是变异的),redux认为它的状态相同,并且不更新道具所以不重新渲染(我自己的经验) )

  • 何时应考虑shouldComponentUpdate

假设你有一个非常大而复杂的形式,它考虑了4种子形式,现在每种形式都可以访问部分道具。但是当用户填写表单时道具会不断变化,因此它会一次又一次地渲染。现在有两种解决方案

  1. 一次只渲染用户可见的表单或部分,只渲染当前标签(如果是多标签表单)
  2. 对shouldComponentUpdate进行全面检查,只有在道具中对象的相关道具或属性发生变化时才返回true
  3. 现在ImmutableJs做的是防止对象发生变异,因此你不会遇到你希望它重新渲染的情况,但它没有

    因此,如果您希望阻止从两个解决方案中重新渲染,那么一切都取决于您的偏好