我们有一个使用React + Redux + ImmutableJS的项目。我们的一位工程师最近添加了一个辅助方法,以支持在将ImmutableJS Map作为prop传递给组件时对其进行破坏:
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()
的简单解决方案。为什么在任何地方都没有真正提到它? 最佳答案
我遵循redux文档中的建议,对所有连接的组件使用HOC,以允许我与redux之外的普通javascript对象进行交互。所以我的选择器和缩减器仍然使用ImmutableJS对象,但是其余的代码使用普通的javascript对象:
https://redux.js.org/docs/recipes/UsingImmutableJS.html#use-a-higher-order-component-to-convert-your-smart-components-immutablejs-props-to-your-dumb-components-javascript-props
编辑-不确定这是否是您上面提到的toJS,我假设您的意思是ImmutableJS.toJS。
就首选项而言,使用HOC只需对每个组件执行一次,而不是每次在方法中使用一个组件。