1
我試圖修改OrderedMap的所有記錄的'completed'屬性。這是OrderedMap:immutable js修改所有嵌套記錄
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;
這工作,但如何?
它是否工作,因爲狀態是不可變的,並且在第一次迭代之後,forEach在第一個狀態obj上運行,它現在是匿名的?
是否有任何其他更好的可能性來修改所有嵌套元素的屬性?
哪裏是混亂呢? state.forEach通過OrderedMap進行迭代,在forEach調用期間分配,即如果您在forEach中更改狀態(如add/remove Record)forEach將繼續使用原始狀態實例進行迭代。 – IL55
沒有真正的混淆,我只是問自己,如果這是在性能方面最好的方式來爲每個更新生成一個新的映射,以便對不可變結構進行更新。 – duke2