0

我有一个管理以下状态的反应减速器

const exampleState: INote[][] = [
  [
    { x: 3, y: 5, value: '4' },
    { x: 3, y: 6, value: '4' },
  ],
  [
    { x: 7, y: 3, value: '4' },
    { x: 8, y: 5, value: '7' },
    { x: 8, y: 5, value: '6' }
  ],
];

所以一个包含特定类型对象数组的二维数组。出于某种原因,我无法弄清楚如何更新这种状态。我特别希望能够将 INote 的新实例(不改变原始状态)添加到特定的嵌套数组中。我怎样才能做到这一点?我需要将对象添加到的数组的索引在我的 reducers 操作对象中

4

2 回答 2

1

好吧,显而易见的方法是不可变地更新这个状态,例如,假设我有一个ADD_NOTE动作,它可能看起来像这样:

{type: "ADD_NOTE", payload: { item: INote, index: number }}

然后,此操作的 reducer 的示例返回语句将是:

return state.map((arr, i) => i === index ? [...arr, item] : arr)

这将更新数组,并将item使用提供的操作索引添加到数组的末尾。

另一个可能让您的生活更轻松的解决方案是使用帮助库,例如https://github.com/kolodny/immutability-helperhttps://github.com/immerjs/immer

于 2020-06-08T13:52:11.597 回答
0

您需要使用数组objects而不是数组,因此您可以向每个数组arrays添加一个identifier诸如 an ,以便您可以根据其更新特定的idobjectobjectid

于 2020-06-08T13:49:34.923 回答