2

我有以下反应状态:

state: {
   objectOne: {
      arrayOne: [
         {
            arrayTwo: [
                {
                   value: 'some value'
                }
            ]         
         }
      ]
   }
}

我正在使用 React useContext 和 useReducer 钩子。我想要做的是向arrayTwo 添加一个对象。

到目前为止我已经尝试过:

我调用类型为“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
                            ]
                        },
                    ]
                }
            }
4

1 回答 1

0

Immer是一个用于简化此代码的出色库。它会生成传递给它的对象的深层克隆,然后您可以对克隆进行变异。

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;
  }
});

于 2020-06-30T14:20:21.113 回答