reactjs - 使用 immutable.js 进行 React shouldComponentUpdate 的最佳实现是什么

标签 reactjs redux immutable.js

我是 ImmutableJS 的新手。我的应用程序实现了大型 Redux Store 和多个 React 组件。

如果我错了,请纠正我:

  • 我知道 Immutable 的好处是保护 Flux Store 并避免对组件进行不必要的 vDom 渲染而获得未更改的 props。
  • 为了利用 ImmutableJS 获得更好的渲染性能,必须实现 shouldComponentUpdate()

此功能的最佳实现是什么?

我已经找到了它的几个实现,所有实现都使用了shallowEqual()并进行了一些修改:

有人知道我应该在我的情况下使用哪种实现?或者没有并实现特定的shouldComponentUpdate()?在这一点上我有点不知所措

非常感谢您的帮助!!

最佳答案

I understand that the benefits of Immutable is to protect Flux Store and to avoid unnecessary vDom rendering on component getting unchanged props.

这与 Immutable 并没有真正的关系(如果你指的是库)。例如,您可以将普通对象和数组与 Redux 一起使用,但由于 Redux 要求您永远不要改变它们,因此在大多数情况下您可以获得几乎相同的好处。因此,不可变库可以提供更好的 API 来不可变地更新内容,但如果您不改变普通对象或数组,则性能优化不需要它。

To benefit from better rendering performance with ImmutableJS, shouldComponentUpdate() must be implemented.

同样,与 ImmutableJS 并没有真正的关系,但是,是的,为了从 props 的不变性中受益,您需要实现 shouldComponentUpdate()。但是,如果您使用 Redux,您可能已经使用了 React Redux 包中的 connect() ,它在大多数情况下为您实现了 shouldComponentUpdate() 。因此,您实际上不需要为任何 connect() 编辑的组件手动编写它。

Someone knows which implementation I should use in my case? or none and implement specific shouldComponentUpdate()? I am slightly at a loss on this point

如果您没有性能问题,请不要使用其中任何一个。在大多数情况下,React 本身的性能相当不错,并且其上的 connect() 将添加一个很好的 shouldComponentUpdate() 默认实现。

对于没有 connect()ed 但仍然经常更新的组件,我建议您使用 react-addons-shallow-compare 。它由 PureRenderMixin 在内部使用,但由于 mixins 并未真正在现代 React API 中使用,因此单独的函数可能会更方便。

如果您想要对 Immutable.is 提供特殊支持,您确实可以使用类似 shallowEqualImmutable 的内容。 。它更好地理解不可变集合,因为它认为相同值的列表是相同的。此时,您最好针对您的应用程序分析不同的实现,因为具体细节可能会根据您的用例而有所不同。

不要过早优化,在解决之前确保这是一个实际问题。

关于reactjs - 使用 immutable.js 进行 React shouldComponentUpdate 的最佳实现是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36630140/

相关文章:

javascript - redux store 更改时路由刷新并连续点击 Link

reactjs - 为什么我们在 Flux/Redux 架构中解耦操作和 reducer ?

redux - 在 Vuex 中不使用操作就提交突变是不是很糟糕?

javascript - 对象分配扩展对象的不可变数组

javascript - Immutable.js 插入嵌套对象中的数组

javascript - 如何使用 React Hook 将多个状态聚合为一个主状态?

reactjs - Shopify 应用程序 - 脚本标签 - 从商店检索数据时出现 CORS 错误

javascript - 更改所有嵌套对象的值 Immutable.js

arrays - ReactJS 从数组渲染图像

javascript - React.PropTypes.number 随最小值和最大值 float