网站搜索

reactjs - React:上下文钩子,将对象推入数组


我得到的错误是 无法找到名称 'objectArray'。

interface StateInterface {
  objects: {
    objectArray: object[];
    selected: object;
  };
}

const InitialState: StateInterface = {
  objects: {
    objectArray: [],
    selected: {},
  },
};


const Reducer = (state: StateInterface, action: any) => {
  switch (action.type) {
    case 'SELECTED':
      return {
        ...state,
        objects: { ...state.objects, selected: action.value },
      };
    case 'ADD_OBJECT':
      return {
        ...state,
        objects: { ...state.objects, objectArray: objectArray.push(action.value )},
//                                                     ^---- Cannot find name 'objectArray'.ts(2304)
      };
    default:
      return state;
  }
};

我也尝试了

objects: { ...state.objects, objectArray:  ...action.value )},

答案#1

在那一点上,只有 state 对象在作用域内(作为参数提供给 reducer),尝试在出现错误的地方将 objectArray 替换为 state.objectArray。

但你还需要以不可变的方式附加该值才能正确(这是 reducer 的规则),所以你需要把整行代码写成类似这样:

objects: { ...state.objects, objectArray: [...state.objectArray, action.value]},

创建一个包含旧值和你正在添加的新值的新数组。