不推荐使用 index 作为 v-for 的 key,因其不稳定,易导致状态错乱、DOM 复用错误和性能下降;应优先使用 item.id 等唯一标识符作为 key,index 仅用于展示或逻辑判断。
在 Vue 中,v-for 是处理列表渲染的核心指令,而 index 和唯一标识(如 id)分别承担不同角色:前者用于获取位置信息,后者用于稳定追踪节点。二者常一起用,但目的和风险完全不同。
index 是遍历时自动提供的当前项下标(从 0 开始),它不是必须写,但需要时可显式解构:
v-for="(item, index) in list",其中 index 是第二个参数,顺序不能颠倒{{ index + 1 }} 即可key 是 Vue 虚拟 DOM diff 算法的关键依据,必须满足“稳定、唯一、可预测”:
user.id、post.slug),就该优先用它::key="item.id"
['a','b','c']),且确定不会增删/排序,才可退而求其次用 :key="index"
一个常见场景:渲染用户列表,既要显示序号,又要保证 key 可靠:
<ul><li v-for="(user, index) in users" :key="user.id" :class="{ 'first': index === 0 }">{{ index + 1 }}. {{ user.name }} — ID: {{ user.id }}</li></ul>
这里 index 仅用于展示和样式控制,key 始终绑定 user.id,分工清晰,安全高效。
如果后端返回的数据确实缺少唯一字段,不要硬造 index,可考虑:
crypto.randomUUID() 或时间戳+序号拼接),并在添加数据时一并存入JSON.stringify(item) 作 key(仅限简单不可变对象,且确保结构完全一致)provide/inject 或全局计数器生成递增 ID(适合本地临时列表)