Javascript ImmutableJS-推入嵌套数组
结果: 错误:无效的密钥路径Javascript ImmutableJS-推入嵌套数组,javascript,immutability,immutable.js,Javascript,Immutability,Immutable.js,结果: 错误:无效的密钥路径 我认为可能需要将子列表设置为List();尝试此操作时,我会遇到相同的错误。使用获得的对象,更新子数组并返回整个对象 const List = Immutable.List; const items = [ { id: 1, subList: [] }, { id: 2, subList: [] }, { id: 3, subList: [] } ]; const newItem = { name: "sublist item" }; let co
我认为可能需要将子列表设置为
List()
;尝试此操作时,我会遇到相同的错误。使用获得的对象,更新子数组并返回整个对象
const List = Immutable.List;
const items = [
{ id: 1, subList: [] },
{ id: 2, subList: [] },
{ id: 3, subList: [] }
];
const newItem = { name: "sublist item" };
let collection = List(items);
collection = collection.updateIn([0, 'subList'], function (items) {
return items.concat(newItem)
});
这不起作用,因为
Immutable.List
的元素是普通的旧JavaScript对象(POJO),而不是Immutable.Map
s,所以updateIn
不知道如何使用它们。您可以:
- 使对象
列表作为构造函数,将整个对象图转换为不可变对象。()不可变。使用而不是
s。将不可变来映射
- 使用
而不是update([0])
来获取POJO并对其进行变异(如@Navjot的答案)updateIn
集合
,第一个元素为:
const List = Immutable.List;
const items = [
{ id: 1, subList: [] },
{ id: 2, subList: [] },
{id: 3, subList: [] }
];
const newItem = { name: "sublist item" };
let collection = List(items);
collection = collection.update([0], function (obj) {
obj.subList = obj.subList.concat(newItem)
return obj;
});
为此,我们需要做一些更改
列表
const List=Immutable.List;
常数项=[{
id:1,
子列表:[]
},
{
id:2,
子列表:[]
},
{
id:3,
子列表:[]
}
];
常量newItem={
名称:“子列表项”
};
让collection=Immutable.fromJS(items);
集合=集合。更新(0,项=>{
return item.updateIn(['subList'],subList=>{
返回子列表concat(newItem);
});
});
console.log(收集)
哪个键导致错误?很难说()。通过使用最新的不可变项在本地运行,我知道问题是[0]无法设置将updateIn
更改为getIn
,然后尝试删除“subList”键。它是否返回第一张地图?
{
id : 1,
subList: [
{name: "sublist item"}
]
}