必须避免state
对象中的任何突变。您能否建议如何使用 Immutable.Map()
按 rowId 更改行文本?
setIn
函数在这种情况下似乎不适用于 Map?
var state = {
pages: [
{
tiles: [
{
rows: [
{rowId: 'row1', text: 'text1'},
{rowId: 'row2', text: 'text2'},
{rowId: 'row3', text: 'text3'}
//...
]
},
{
//...
}
//...
]
}
//...
]
};
function onRowUpdateAction(state, rowId, rowText) {
var map = Immutable.Map(state);
//TODO: Update row text by row id ?
return map.toObject();
}
var newState = onRowUpdateAction(state, 'row2', 'updatedText');
提前致谢!
最佳答案
setIn
可以很好地与 map 和列表配合使用。从你写的内容来看,问题似乎是,你实际上并没有处理深度不可变的结构。请注意,创建 immutable.Map
例如
immutable.Map({a: {b: 'c'}})
使用键 'a'
和值 {b: 'c'}
创建不可变的 Map(作为普通 JS 对象)!难怪,immutable 的 getIn
不适用于它。
要使结构深度不可变,请使用 immutable.fromJS
(这可能就是您想要使用的)。
关于javascript - 如何使用 ImmutableJS Map 设置嵌套数组中项目的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36473143/