我们有一个使用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只需对每个组件执行一次,而不是每次在方法中使用一个组件。

09-05 14:25