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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Immutable.js在嵌套Map中添加新的键/值对相关的知识,希望对你有一定的参考价值。

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

我认为mergeDeepIn()应该诀窍,但我得到一个“无效的keyPath”错误。

州看起来像这样:

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

'requests'和'messages'是不可变的地图。

我试过这个:

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

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

答案

不变性是数据结构的一种属性,意味着:在创建数据结构之后,它永远不会再发生变化。在Map中添加或替换值意味着改变Map,这正是immutable-js试图阻止的。

你可以做的是从你现有的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

qazxswpoi

以上是关于如何使用Immutable.js在嵌套Map中添加新的键/值对的主要内容,如果未能解决你的问题,请参考以下文章

在 TypeScript 中使用 Immutable JS 以正确的方式检索 List/Map 的值

[Immutable,js] Iterating Over an Immutable.js Map()

[Immutable.js] Working with Subsets of an Immutable.js Map()

[Immutable.js] Differences between the Immutable.js Map() and List()

immutable.js文档

如何在 immutable.js 中定义字符串和数字数组或元组