在 Redux 中反应重新渲染

React ReRender in Redux

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

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

我正在看这个关于 ImmutableJs 的视频 https://youtu.be/YFP8lbdZ0cs?t=33m59s 现在我不知道我是否应该在每个具有 shallowEqual 函数的组件中实现 shouldComponentUpdate,或者这件事是由 React 自动完成的? (可能是新版本改了)

该不该烦我?当我不使用 ImutableJs 而使用最新的 React 和 Redux 版本时,最好的方法是什么?

React Redux 包做了很多工作来确保您的包装组件只在需要时呈现。请参阅 http://redux.js.org/docs/FAQ.html#react-rendering-too-often. There's also a number of React rendering debugging tools listed over in my Redux-related libraries catalog 上的相关 Redux 常见问题解答,它可以告诉您组件何时真正重新渲染,以及原因。

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

在我回答你的问题之前,为了让你理解,我想澄清几件事,

  • 不可变性如何影响 react-redux

考虑到您有一个处于 redux 状态的对象,并且您没有处理不可变性并且更改了一个 属性。现在,当您更改 属性 时,您希望它重新渲染,但由于对象引用没有更新(因为状态发生了变化),redux 会考虑其相同的状态并且不会更新道具,因此不会重新渲染(我自己的经验)

  • 什么时候应该考虑 shouldComponentUpdate

假设你有一个非常大和复杂的表单,它考虑了 4 个子表单,现在每个表单访问一个 partial prop。但是随着用户填写表单,道具会不断变化,因此它会一次又一次地呈现。现在有两种解决方案

  1. 一次仅呈现用户可见的表单或部分,某种程度上仅呈现当前选项卡(如果是多选项卡表单)
  2. 对 shouldComponentUpdate 进行全面检查,仅当相关道具或道具中的对象 属性 发生更改时才 return 为真

现在 ImmutableJs 所做的是防止对象发生变异,因此您不会遇到您希望它重新渲染但它没有的情况

所以这完全取决于您的喜好,您希望如何防止从两种解决方案中重新渲染