如何使用 Immutable.js 在嵌套地图中添加新的 key/value 对
How to add a new key/value pair in a nested Map using Immutable.js
我想将新的 key/value 对添加到嵌套在另一个地图中的地图。如果密钥已经存在,则应将其替换。
我认为 mergeDeepIn() 应该可以解决问题,但我收到 "invalid 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)
应该将消息添加到 'messages' 映射中。
不变性是数据结构的属性,意思是:创建该数据结构后,它永远不会再改变。添加或替换值 from/to 和 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
我想将新的 key/value 对添加到嵌套在另一个地图中的地图。如果密钥已经存在,则应将其替换。
我认为 mergeDeepIn() 应该可以解决问题,但我收到 "invalid 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)
应该将消息添加到 'messages' 映射中。
不变性是数据结构的属性,意思是:创建该数据结构后,它永远不会再改变。添加或替换值 from/to 和 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