我们有一个使用React + Redux + ImmutableJS的项目。我们的一位工程师最近增加了一个辅助方法来支持它传递时,一个组件作为道具解构的ImmutableJS地图:React Component Props的解构ImmutableJS映射
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()
。为什么不在任何地方提及?
对我有很大争议的问题,以及你可以在这里查看的一些原因:https://esdiscuss.org/topic/extensible-destructuring-proposal 从我的角度来看,没有理由这样做,因为你可以通过映射到更智能的组件,并且仍然可以获得不可改变的优势,但使用您的方法,您仍然会改变容器。所以你可以更新或重新构建你的REDX端来获得一个干净的状态,而不需要传播Immutable。 –