2016-03-03 69 views
1

我试图将新项目推入深层嵌套的不可变记录。如何将新项目推入深层嵌套记录中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

回答

1

的jsbin(注意的Array.push不返回结果数组!)。它应该是:

+0

谢谢,是的,我已经知道了。是一个愚蠢的错误。 – XoR

+1

完美:)如果它适合你,你能否接受答案?谢谢。 –

0

请注意这里。

你最初的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()函数。