如何将新项目推入深层嵌套记录中immutableJS
问题描述:
我试图将新项目推入深层嵌套的不可变记录。如何将新项目推入深层嵌套记录中immutableJS
const i = Immutable.Record({
nested: new (Immutable.Record({
someKey: [{id:1,name:'adam'}, {id:2,name:'steve'}],
})),
});
const myMap = new i;
const myNewMap = myMap.updateIn(['nested', 'someKey'], (fav)=> fav.push({id:3,name:'dan'}));
console.log(myNewMap.toJS());
我所期望的是更新与新价值的嵌套列表,但实际产量是
[object Object] {
nested: [object Object] {
someKey: 3
}
}
因此Im做错事,所以我怎么会去与更新记录新的价值?
这里是你错过了return
声明传递给updateIn
函数的例子 http://jsbin.com/nipolimuyu/edit?html,js,console
答
的jsbin(注意的Array.push不返回结果数组!)。它应该是:
答
请注意这里。
你最初的obj应该都是不可变的js obj。你可以使用fromJS()。
在你的榜样,你需要你的阵列你只需要做到底添加为ImmutableJS列表
const i = Immutable.Record({
nested: new (Immutable.Record({
someKey: new Immutable.List([{id:1,name:'adam'}, {id:2,name:'steve'}]),
})),
});
// The bad way, add a normal JS array to an immutableJS Record/map
const i = Immutable.Record({
nested: new (Immutable.Record({
someKey: [{id:1,name:'adam'}, {id:2,name:'steve'}],
})),
});
所以像你想
const myNewMap = myMap.updateIn(['nested', 'someKey'], fav => fav.push({id:3,name:'dan'}));
所以,现在你可以使用返回一个新的immutableJS对象的immutableJS push()函数。
谢谢,是的,我已经知道了。是一个愚蠢的错误。 – XoR
完美:)如果它适合你,你能否接受答案?谢谢。 –