-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
写 React / Vue 项目时为什么要在列表组件中写 key,其作用是什么?
当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用“就地复用”策略。
如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素。
这个默认的模式是高效的,但是只适用于不依赖子组件状态或临时 DOM 状态 (例如:表单输入值) 的列表渲染输出。
为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key 属性。
理想的 key 值是每项都有的唯一 id。
key 帮助 React 识别哪些元素改变了,比如被添加或删除。因此你应当给数组中的每一个元素赋予一个确定的标识。
当基于下标的组件进行重新排序时,组件 state 可能会遇到一些问题。
由于组件实例是基于它们的 key 来决定是否更新以及复用,如果 key 是一个下标,那么修改顺序时会修改当前的 key,导致非受控组件的 state(比如输入框)可能相互篡改导致无法预期的变动。
避免“就地复用”,便于跟踪节点位置变化,防止“就地复用”时导致丢失表单输入值等问题。
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels