渲染网页时反应是否保持组件中的旧状态?

Is the react keep the old state in the component when rendering web page?

我有一个项目列表,每个项目都有一个状态和事件处理程序(我正在使用 setTimeout 来模拟这种情况。)来更新状态。

当我从列表中删除项目 1 时,项目 2 的状态变为“aa0”而不是“bb”或“N.A”。

执行setTimeout函数后,item 2状态恢复正常

不幸的是,在我的真实开发环境中,更新项目列表后可能不会触发该事件。

你能告诉我为什么吗?是否有解决问题的最佳实践?

这是我的源代码供您参考:

https://stackblitz.com/edit/react-kzjznp

问题是由于项目密钥

<Item itemObj={obj} key={index} />

删除项目组件的键之前是“0”和“1”。 删除第一项后,剩余组件的键变为 0,表示旧项目或已删除的项目组件,因此不会再次渲染。

您可以通过更改密钥来修复它。 In this case better don't use index, use a unique id instead 这里可以使用物品名称

<Item itemObj={obj} key={obj.name} />

工作代码

https://stackblitz.com/edit/react-ldrzai?file=src%2FItemList.js