【问题标题】:updated nested Immutable in immutable.js更新了 immutable.js 中的嵌套 Immutable
【发布时间】:2017-01-15 02:05:36
【问题描述】:

如何在不改变整个树的情况下更新嵌套的不可变 Map 项?

示例:

var tree = Map({
 branch1:Map([]),
 branch2:Map({ 1: Map({id:1,value:'hello'}) }),
});

如何更新 tree.branch2.1.value ?

这会导致 branch1 获得新副本吗?

我在 Reactjs Redux 应用程序中使用它。因为我也在使用选择器,所以我想更改 branch2 的值而不更改分支 1,这样选择器就不会再次重新计算

【问题讨论】:

  • 参见github.com/reactjs/reselect——一个很好的库,用于创建记忆选择器,这样您就不必担心它们会在状态更新时重新计算。

标签: reactjs redux immutable.js reselect


【解决方案1】:

更改 Immutable.js 对象中的值将总是返回一个全新的对象,而不是改变它。这基本上是图书馆的重点。如果您担心基于状态更改的其他方面的不必要的重新渲染,您应该使用shouldComponentUpdate 生命周期方法来确保您的组件仅在应用程序的该部分的 value 时更新状态会发生变化,而不仅仅是当它是一个新对象时。

对于您的情况,将setIn 方法用于不可变映射是最有意义的。

tree.setIn(['branch2', 1, 'value'], 'newValue');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    相关资源
    最近更新 更多