如何使用ImmutableJS Map设置嵌套数组中项的属性

How to set a property of an item in nested array using ImmutableJS Map?

本文关键字:属性 数组 嵌套 何使用 ImmutableJS Map 设置      更新时间:2024-03-10

必须避免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可以很好地处理"映射"answers"列表"。从你所写的内容来看,问题似乎是,你实际上并没有处理深刻的不可变结构。注意,创建immutable.Map(如)

immutable.Map({a: {b: 'c'}})

创建具有关键字'a'和值{b: 'c'}的不可变Map(作为普通JS对象)!难怪,那个不可变的getIn不能和它一起工作

要使结构完全不可变,请使用immutable.fromJS(这可能是您想要使用的)。