我在我的React应用程序中使用Redux,并且确保我不改变状态但返回新状态我在开发中添加了中间件https://github.com/leoasis/redux-immutable-state-invariant。
我的问题是,当商店发生变化时,我的所有组件都会重新渲染吗?
我正在观看有关ImmutableJs的视频https://youtu.be/YFP8lbdZ0cs?t=33m59s现在我不知道是否应该在每个具有shallowEqual功能的组件中实现shouldComponentUpdate,或者这个事情是通过自动反应完成的? (也许它在新版本中有所改变)
它应该困扰我吗?当我不使用ImutableJs并使用最新的React和Redux版本时,最好的方法是什么?
答案 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)
在我回答你的问题之前,我想澄清一些你理解的事情,
考虑到你有一个处于redux状态的对象,并且你没有处理不变性并且你改变了一个属性。现在你改变了一个属性,所以你希望它重新渲染,但由于对象引用没有更新(因为状态是变异的),redux认为它的状态相同,并且不更新道具所以不重新渲染(我自己的经验) )
假设你有一个非常大而复杂的形式,它考虑了4种子形式,现在每种形式都可以访问部分道具。但是当用户填写表单时道具会不断变化,因此它会一次又一次地渲染。现在有两种解决方案
现在ImmutableJs做的是防止对象发生变异,因此你不会遇到你希望它重新渲染的情况,但它没有
因此,如果您希望阻止从两个解决方案中重新渲染,那么一切都取决于您的偏好