渲染网页时反应是否保持组件中的旧状态?
Is the react keep the old state in the component when rendering web page?
我有一个项目列表,每个项目都有一个状态和事件处理程序(我正在使用 setTimeout 来模拟这种情况。)来更新状态。
当我从列表中删除项目 1 时,项目 2 的状态变为“aa0”而不是“bb”或“N.A”。
执行setTimeout函数后,item 2状态恢复正常
不幸的是,在我的真实开发环境中,更新项目列表后可能不会触发该事件。
你能告诉我为什么吗?是否有解决问题的最佳实践?
这是我的源代码供您参考:
问题是由于项目密钥
<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
我有一个项目列表,每个项目都有一个状态和事件处理程序(我正在使用 setTimeout 来模拟这种情况。)来更新状态。
当我从列表中删除项目 1 时,项目 2 的状态变为“aa0”而不是“bb”或“N.A”。
执行setTimeout函数后,item 2状态恢复正常
不幸的是,在我的真实开发环境中,更新项目列表后可能不会触发该事件。
你能告诉我为什么吗?是否有解决问题的最佳实践?
这是我的源代码供您参考:
问题是由于项目密钥
<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