必须避免state
对象中的任何突变。您能否建议如何使用Immutable.Map()
按行更改行文本?
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');
提前致谢!
答案 0 :(得分:0)
setIn
可以很好地使用地图和列表。从你所写的问题看来,你实际上并没有处理深层不可变的结构。请注意,创建immutable.Map
,例如
immutable.Map({a: {b: 'c'}})
创建带有键'a'
和值{b: 'c'}
的不可变Map(作为普通的JS对象)!难怪,不可变的getIn
不能用它。
要使结构完全不可变,请使用immutable.fromJS
(这可能是您打算使用的)。