javascript - 使用 Immutable.js 从 memoized 选择器返回纯 JS 对象

标签 javascript reactjs redux immutable.js reselect

我正在开发 React + redux + Immutable.js + reselect 应用程序。我正在考虑在 reducer 和 sagas 中使用 Immutable.js 的设计,但不想将这个库与智能组件结合起来,所以我的应用程序的展示部分尽可能干净。

根据 redux 文档 your selectors should always return Immutable object .

我的想法是在重新选择选择器中计算派生状态并返回纯 JS 对象。如果我使用 memoized 选择器,如果 redux 状态的底层部分相同,则不会在每次调用时创建新对象,因此除非需要,否则我的组件不会重新呈现。

我知道我会部分支付可组合性,因为选择器不能用作其他 Immutable.js-ready 选择器的输入,但我会得到更简洁的智能组件。

这种解决方案还有其他缺点吗?

为什么 redux 文档如此强烈地鼓励将不可变对象(immutable对象)推送到智能组件?

最佳答案

Are the any other drawbacks of such solution?

toJS 是一项昂贵的操作,即使已内存。争论的焦点是,如果不需要,为什么要使用 toJS

Why does redux documentation so strongly encourages to push Immutable object to smart components?

前面提到的,再加上它使得对整个 redux 管道的推理变得更容易,即状态的任何突变(副作用/态射)都更容易理解,因为有一个清晰的流程和发生变化的点。

综上所述,归结为偏好以及人们认为架构中的瓶颈/权衡所在。如果您觉得在选择器中使用 toJS 时,干净的分离胜过潜在的风险/注意事项,那么这就是您的架构的正确调用。

关于选择器中可组合性丧失的旁注,您始终可以有两个选择器,一个返回不可变状态——用于选择器组合,另一个使用不可变状态选择器并调用 toJS,在适当的地方。

关于javascript - 使用 Immutable.js 从 memoized 选择器返回纯 JS 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50281493/

相关文章:

javascript - 如何仅在第一次调用函数时执行 if 语句?

javascript - 如何操作浏览器历史记录并捕获浏览器后退/前进按钮?

reactjs - 在 Material-ui 包装组件中定位和设置特定子元素样式的正确方法?

javascript - 有没有办法为这 3 个事件设置一个事件处理程序?

javascript - TypeError this.props.addNode 不是函数

javascript - React Redux 不更新状态

javascript - 如何在 Jekyll 3 中为 rouge 指定自定义语言解析器别名?

javascript - React State 数据无法作为 props 传递

javascript - gulp 将 React 模块转换为类错误

javascript - PHP 和 WooCommerce 问题