我在阅读https://coderwall.com/p/jdybeq/the-importance-of-component-keys-in-react-js的文章时感到奇怪。
它有一个简单的小提琴代码,上面写着 - 如果你没有唯一的常量键,你可能最终会进入
在下面的套装中非常混乱 -
答案 0 :(得分:8)
扩展@Deadfish答案。我们假设您有10个待办事项,每个项目都有状态(例如是否处于编辑模式)。
在下一个渲染过程中,只剩下9个待办事项。例如。因为你删除了其中一个项目。
现在反应需要知道还剩下哪10个原始项目,因此它可以保留每个项目的状态,并仅重新渲染更改状态的项目。
这就是使用key
的反应。如果使用索引作为键,则原始键为0..9。新密钥是0..8。
这可能会导致一些问题:
使用唯一和常量键 - 在单个渲染运行中不仅仅是唯一,尤其是常量而非多个渲染周期 - 将确保一切按预期工作,并确保有效地响应更新DOM。
答案 1 :(得分:5)
让反应键保持恒定和独特总是好的。有时候index
无效。
让我们考虑一下我们的应用程序中有两个组件TodoList
和TodoItem
的情况。 TodoList
组件遍历todos
数组并为每个待办事项呈现TodoItem
。我们假设您已打开第二个TodoItem
进行编辑。所以它的状态显示{editing: true}
并且它呈现输入框而不是标签。
现在,如果您使用index
作为键,则在删除第二个待办事项时,第三个待办事项将从已删除的待办事项继承状态并显示输入框而不是标签。这是因为它们共享相同的密钥。
我希望我能说清楚。