在 immutable.js 中更新了嵌套的 Immutable
updated nested Immutable in immutable.js
如何在不改变整棵树的情况下更新嵌套的不可变地图项?
示例:
var tree = Map({
branch1:Map([]),
branch2:Map({ 1: Map({id:1,value:'hello'}) }),
});
如何更新 tree.branch2.1.value?
这会导致 branch1 获得新副本吗?
我在 Reactjs Redux 应用程序中使用它。因为我也在使用选择器,所以我想在不更改 branch1 的情况下更改 branch2
的值,这样选择器就不会再次重新计算
更改 Immutable.js 对象中的值将 总是 return 一个全新的对象,而不是改变它。这基本上就是图书馆的全部意义所在。如果您担心基于状态更改的其他方面的不必要的重新渲染,您应该使用 shouldComponentUpdate
生命周期方法来确保您的组件仅在 value 时更新应用程序状态的那部分会发生变化,而不仅仅是当它是一个新对象时。
对于您的情况,对不可变映射使用 setIn 方法最有意义。
tree.setIn(['branch2', 1, 'value'], 'newValue');
如何在不改变整棵树的情况下更新嵌套的不可变地图项?
示例:
var tree = Map({
branch1:Map([]),
branch2:Map({ 1: Map({id:1,value:'hello'}) }),
});
如何更新 tree.branch2.1.value?
这会导致 branch1 获得新副本吗?
我在 Reactjs Redux 应用程序中使用它。因为我也在使用选择器,所以我想在不更改 branch1 的情况下更改 branch2
的值,这样选择器就不会再次重新计算
更改 Immutable.js 对象中的值将 总是 return 一个全新的对象,而不是改变它。这基本上就是图书馆的全部意义所在。如果您担心基于状态更改的其他方面的不必要的重新渲染,您应该使用 shouldComponentUpdate
生命周期方法来确保您的组件仅在 value 时更新应用程序状态的那部分会发生变化,而不仅仅是当它是一个新对象时。
对于您的情况,对不可变映射使用 setIn 方法最有意义。
tree.setIn(['branch2', 1, 'value'], 'newValue');