0

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

例子 :

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

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

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

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

4

1 回答 1

3

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

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

tree.setIn(['branch2', 1, 'value'], 'newValue');
于 2016-09-07T14:10:28.037 回答