Javascript 如何将深度嵌套对象添加到React Reducer中的深度嵌套数组中?

Javascript 如何将深度嵌套对象添加到React Reducer中的深度嵌套数组中?,javascript,arrays,reactjs,object,use-reducer,Javascript,Arrays,Reactjs,Object,Use Reducer,我有以下反应状态: state: { objectOne: { arrayOne: [ { arrayTwo: [ { value: 'some value' } ] } ] } } 我正在使用React-useContext和useReducer挂钩。 我

我有以下反应状态:

state: {
   objectOne: {
      arrayOne: [
         {
            arrayTwo: [
                {
                   value: 'some value'
                }
            ]         
         }
      ]
   }
}
我正在使用React-useContext和useReducer挂钩。 我要做的是向arrayTwo添加一个对象

到目前为止我所尝试的:

case 'ADD_NEW_OBJECT':
            return {
                ...state,
                objectOne: {
                    ...state.objectOne,
                    arrayOne: [
                        ...state.objectOne.arrayOne,
                        {
                            ...state.objectOne.arrayOne[payload.arrayOneIndex],
                            arrayTwo: [
                                ...state.objectOne.arrayOne[payload.arrayOneIndex].arrayTwo,
                                payload.value
                            ]
                        },
                    ]
                }
            }
我调用一个类型为“ADD_NEW_OBJECT”的分派函数,有效负载是一个包含一些键值对的对象

    dispatchFunction({
       type: 'ADD_NEW_OBJECT', 
       payload: {
          value: {
             a: 'this is the ',
             b: 'object I want to add',
          }
          arrayOneIndex: 0, 
          arrayTwoIndex: 0
       }
    });
这是我的useReducer案例陈述:

case 'ADD_NEW_OBJECT':
            return {
                ...state,
                objectOne: {
                    ...state.objectOne,
                    arrayOne: [
                        ...state.objectOne.arrayOne,
                        {
                            ...state.objectOne.arrayOne[payload.arrayOneIndex],
                            arrayTwo: [
                                ...state.objectOne.arrayOne[payload.arrayOneIndex].arrayTwo,
                                payload.value
                            ]
                        },
                    ]
                }
            }
是简化此代码的一个很好的库。它生成传递给它的对象的深层克隆,然后您可以对克隆进行变异

import produce from "immer";

const reducer = produce((draft, action) => {
  switch (action.type) {
    case ADD_NEW_OBJECT:
      draft.objectOne.arrayOne[action.payload.arrayOneIndex][
        action.payload.arrayTwoIndex
      ].push(value);
      return draft;
  }
});


谢谢你的回答。我已经尝试过了,但是我得到了一个TypeError,如下所示:TypeError:无法读取undefinedIt的属性“push”已经在draft.objectOne.arrayOne中失败,因为他找不到它并返回undefined。你确定数组确实存在吗?当然可以。国家的结构如上所述。