【问题标题】:immutable js modify ALL nested records不可变 js 修改所有嵌套记录
【发布时间】: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 将继续使用原始状态实例进行迭代。
  • 没有真正的困惑,我只是问自己,就性能而言,这是否是为我对不可变结构进行的每次更新生成新地图的最佳方法。

标签: javascript immutable.js


【解决方案1】:

是的,有-

state = state.map((todoItem)=>todoItem.set("completed", true));

【讨论】:

  • 出色的答案。谢谢!
猜你喜欢
  • 1970-01-01
  • 2019-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多