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。你确定数组确实存在吗?当然可以。国家的结构如上所述。