2016-07-27 59 views
8

假设有一个目的:Immutable.js推入阵列中嵌套的对象

const object = { 
    'foo': { 
    'bar': [1, 2, 3] 
    } 
} 

我需要推动4object.foo.bar阵列。

现在我在做这样的:

const initialState = Immutable.fromJS(object) 
const newState = initialState.setIn(
    ['foo', 'bar', object.foo.bar.length], 
    4 
) 
console.log(newState.toJS()) 

但我真的不喜欢它,因为我需要在路径中使用object.foo.bar.length。在我的真实例子中,对象嵌套得更深,并且数组的长度看起来非常难看。还有另一种更方便的方法吗?

回答

2

我使用seamless-immutable,当我加入新的项目,以嵌套的对象的数组,我出现此错误:

The push method cannot be invoked on an Immutable data structure.

我的数组仍然有push方法,但它不起作用。解决的办法是使用CONCAT代替,在#43更多的细节:

initialState.updateIn(['foo', 'bar'], arr => arr.concat([4])); 

希望这有助于!

+0

同样的问题在这里,是有道理的,因为push修改了不可变的数据结构是不可能的。 – Lucas