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

标签 javascript immutable.js

必须避免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/

相关文章:

javascript - 如何根据在rails简单表单中选中的单选按钮渲染输入表单

javascript - 分析我的 javascript 代码的最佳方法是什么?

javascript - 如何使滚动箭头在顶部和底部消失? JavaScript

immutable.js - 我可以在 immutable.js 中使用解构赋值吗?

redux - 使用 Redux 和 Immutable JS 存储记录元数据的位置

javascript - immutable.js 可以与服务器上的 redis 互换吗?

javascript - 这个极好的网站是如何构建的?

javascript - 如何使用正则表达式突出显示字符串中的多个关键字/词?

javascript - 计算(ImmutableJS) map 的所有项目?

javascript - 流: Typechecking a complex Immutable shape using fromJS()?