【发布时间】:2018-06-08 05:54:21
【问题描述】:
我们有一个使用 React + Redux + ImmutableJS 的项目。我们的一位工程师最近添加了一个辅助方法,以支持在将 ImmutableJS Map 作为 props 传递给组件时对其进行解构:
export function toObjectShallow(mapping: Map) {
const result = {};
mapping.map((value, key) => {
result[key] = value;
});
return result;
}
因此,我们仍然可以执行以下操作,并避免重复调用 Map.get 导致冗长:
<XyzComponent {...toObjectShallow(this.props.xyz)}/>
是的,这实质上是对原始对象进行两个浅拷贝(我们的方法 + 解构)。这应该是最小的费用。不过我想知道,因为我在 React/Redux/Immutable 社区的其他任何地方都没有看到这种建议,我是否还缺少其他东西会使这变得不理想?
传递的属性仍然是原始的、不可变的道具。只是包含对象发生了变异,这并不重要,因为它无论如何都不会传递给组件。那么,什么给了?这似乎是一个简单的解决方案,同时避免了toJS()。为什么在任何地方都没有真正提到它?
【问题讨论】:
-
对我来说非常值得商榷的问题,以及您可以在此处查看的一些原因:esdiscuss.org/topic/extensible-destructuring-proposal 从我的角度来看,没有理由这样做,因为您可以将 map 传递给更智能的组件,并且仍然获得不可变的好处,但是通过您的方法,您仍然可以改变容器。因此,您可以更新或重新设计您的 redux 端以获得干净的状态,而无需传播 Immutable。
标签: javascript reactjs redux immutable.js