如何将状态传播到特定数组中

How to spread state into a specific array

我有一个对象数组,当调用某个函数时,我想用新数据更新该对象数组中的特定数组。

电话如下:

const DataReducer = (state, action) => {
  switch (action.type) {
    case 'ADD_DATA':
      return [...state, state[0].data:[...state, {id: Math.floor(Math.random() * 999),
        name: action.payload.name,
   }]];
  }
}

问题是我不断收到错误“','预期”,这出现在 : 数据之后 我很确定这是正确的,我正在使用上下文 api 在调用 addName 函数时用新名称更新一些现有状态。 这应该传播现有状态并从项目 [0].data 中获取特定状态,向其添加新名称但我似乎无法让它工作。

如有任何帮助,我们将不胜感激。

这是原始数据对象:[{title: 'Names', data: []}, {title: 'Meal', data: []}]

拆分 return 可能更容易。复制状态,创建一个对象,然后将其添加到 data 数组,保留其中已有的所有对象。然后return副本更新状态。

const DataReducer = (state, action) => {

 const { type, payload } = action; 

 switch (type) {

    case 'ADD_DATA': {

      const copy = [...state];

      copy[0] = {
        ...copy[0], 
        data: [
          ...copy[0].data, {
            id: Math.floor(Math.random() * 999),
            name: 'Bob'
          }
        ]
      };

      return copy;

    }
  }
}

const state = [{title: 'Names', data: []}, {title: 'Meal', data: []}];

const newState = DataReducer(state, { type: 'ADD_DATA', payload: { name: 'Bob' } });

console.log(newState);

return [
  { 
    ...(state[0] || {}),
    data: {
      id: Math.floor(Math.random() * 999),
      name: payload.name
    } 
  },
  ...state?.slice?.(1)
]