首页 > 解决方案 > 在 React / Redux 中添加/更新对象的深层数组

问题描述

在我的 react redux reducer 中,如何使用扩展运算符添加或更新深层嵌套的对象数组?我无法正确使用语法。

我的状态大致是这样的:

state: {
    fields...
    ups: {
        fields...
        ftr: {
            fields...
            arts: [
                {   
                    artId: 12,
                    name: ‘joe’,
                    phones: [
                        {   
                            phoneId: 58,
                            number: ‘nnn’
                        }
                    ]
                }
            ]
        }
    }
}

artId带着一个空phone对象或一个现有对象来添加/更新phones数组。同样,对于 parent 也是如此arts。不能做byId也太晚了,不能切换到“normilizr”。

标签: reactjsreact-redux

解决方案


首先,要理解您遇到的确切问题有点困难。如果您可以提供一些用于更新减速器内部状态的代码,而不仅仅是状态的形状,这将非常有用。为了准确辅助,我们需要看更多代码..

话虽如此,如果我正确理解这一点,当您在减速器中更新状态时,您需要先进行深层复制..或者您是否尝试像这样使用扩展运算符:fields...?...或者是只是为了简洁?

扩展运算符提供了一个浅副本,因此您必须执行以下操作才能获得深 [er] 副本:

case types.SOME_CONSTANT: {
  let _newstate = JSON.parse(JSON.stringify(state));
  _newstate.some.deep.nested.property = action.payload;
  return _newstate;
}

推荐阅读