我正在学习使用ImmutableJS,但我有点困惑。我查看了文档,我看到有数组的对象和列表。
所以我构建了一个像这样的对象:
sampleTodo = Immutable.Map({text: 'Testing 1 2 3', status: 'Open'})
然后执行:list = Immutable.List().push(sampleTodo)
不确定这是否正确。如果是的话,当我有索引并且必须返回修改后的List
时,我会陷入困境。
例如,如果index为0,我会这样做:
list.get(index)
并获取
Object {size: 1, _root: ArrayMapNode, __ownerID: undefined, __hash: undefined, __altered: false}
所以,我不知道如何通过浏览Map
将status: "Complete"
对象的状态设置为List
。
答案 0 :(得分:1)
你可以这样做:
list = list.setIn([index, 'status'], 'Complete')
要理解的关键点是.setIn
使用底层数据类型的索引。由于list
是Immutable.List
,我们可以使用整数来查找第一个元素,即Immutable.Map
。 Immutable.Map
的“索引”是对象key
(字符串),这也是你可以做的原因
list = list.getIn([index, 'status'])
获取商品的状态。
答案 1 :(得分:0)
我在这里找到了一个可行的解决方案: https://stackoverflow.com/a/29655323/3281384
list = list.update(
list.findIndex(function(item) {
return item.get("name") === "third";
}), function(item) {
return item.set("count", 4);
}
);
或者,在我的情况下,:
list = list.update(
index, function(todo) {
return todo.set('status', 'Complete');
}
);