【发布时间】:2016-03-24 09:22:23
【问题描述】:
我正在尝试修改 OrderedMap 的所有记录的“已完成”属性。这是 OrderedMap:
const TodoItem = Record({text: '', completed: false});
let state = OrderedMap({'0': new TodoItem({text: 'First Item'})});
我当前的代码是:
state.forEach((v,k) => {
state = state.updateIn([k.toString(),'completed'], completed => true);
});
return state;
这行得通,但如何?
因为 state 是不可变的并且在第一次迭代后 forEach 在第一个 state obj 上运行,它现在是匿名的吗?
是否有任何其他“更好”的可能性来修改所有嵌套元素的属性?
【问题讨论】:
-
混乱在哪里? state.forEach 由 OrderedMap 进行迭代,OrderedMap 在 forEach 调用期间分配,即如果您更改 forEach 内部的状态(如添加/删除记录),forEach 将继续使用原始状态实例进行迭代。
-
没有真正的困惑,我只是问自己,就性能而言,这是否是为我对不可变结构进行的每次更新生成新地图的最佳方法。