You 不应该将数组索引传递为key
给孩子列表中的每个孩子。这是有问题的代码:
{fields.map((task, j) => {
return (
<Box key={j} padding={2} border={1}>
{...}
</Box>
);
})}
当您运行上面的代码时,您将拥有具有相应数据数组的子级,如下所示
{ key: 0, task: { id: "1", freq: "d" },
{ key: 1, task: { id: "2", freq: "d" },
{ key: 2, task: { id: "3", freq: "d" },
如果删除第一项,在下一次渲染中,数据数组将如下所示
{ key: 0, task: { id: "2", freq: "d" },
{ key: 1, task: { id: "3", freq: "d" },
这是因为第一项task.id = 1
被删除了,但是数组的索引仍然从0
,所以最终之间存在不匹配key
and task.id
.
The best way https://stackoverflow.com/a/43892905/9449426要解决此问题,请直接使用模型中的唯一 ID,而不是数组索引,如下所示key
:
{fields.map((task, j) => {
return (
<Box key={task.id} padding={2} border={1}>
{...}
</Box>
);
})}
现场演示