繁体   English   中英

如何使用 Immutable.js 在嵌套 Map 中添加新的键/值对

[英]How to add a new key/value pair in a nested Map using Immutable.js

我想向嵌套在另一个 Map 中的 Map 添加一个新的键/值对。 如果密钥已经存在,它应该被替换。

我认为mergeDeepIn()应该可以解决问题,但我收到了“无效的 keyPath”错误。

状态如下所示:

{
   "requests":{
      "1":{
         "title":"I have a question",
         "customerId":2,
         "messages":{
            "222":{
               "text":"Hello!",
               "senderId":1,
            },
         },
        ...
      },
      ...
   },
}

'requests' 和 'messages' 是不可变的 Map。

我试过这个:

const message = fromJS({
  "5": {
    text: "test",
  },
})
state.mergeDeepIn(['requests', 1, 'messages'], message)

消息应该被添加到“消息”映射中。

不变性是数据结构的一个属性,意味着:在创建该数据结构后,它将永远不会再改变。 从/向Map添加或替换值意味着改变Map ,这正是 immutable-js 试图阻止的。

您可以做的是从现有Map创建一个新Map

const {Map} = require('immutable');
m = Map({a:1});

Map({...m.toJSON(), b:2}) // Map { "a": 1, "b": 2 }
Map({...m.toJSON(), a:2}) // Map { "a": 2 }
m.set('a', 2) // Map { "a": 2 } , creates a new map same as line above

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM