vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > Vue.js报错:Duplicate keys detected:‘xxx‘

Vue.js报错:Duplicate keys detected:‘xxx‘问题的解决

作者:JJCTO袁龙

文章介绍了在Vue.js中解决`Duplicate keys detected`错误的步骤,包括定位重复的key、确保key的唯一性以及在必要时进行去重或添加前缀,同时,文章还提供了一个性能对比,建议在`v-for`中使用唯一且稳定的字段作为key,索引只在静态列表中使用,以避免警告并提升性能

Vue.js 报错:Duplicate keys detected: ‘xxx’

当你在控制台看到:

[Vue warn]: Duplicate keys detected: 'xxx'. This may cause an update error.

Vue 在告诉你:

「你在 v-for 里用了重复的 key,可能会导致渲染错乱或性能下降。」

按「一看二改三兜底」三步法,3 分钟解决。

一看:定位重复 key

控制台会打印出 重复的具体值组件名,点击堆栈即可跳转到 v-for 所在行。

二改:让 key 真正唯一

1.用数据库主键或唯一字段

<!-- ✅ 唯一且稳定 -->
<li v-for="item in list" :key="item.id">{{ item.name }}</li>

2.不要用索引作为 key(除非列表永不增删)

<!-- ❌ 插入/删除后索引会变化 -->
<li v-for="(item, index) in list" :key="index">{{ item.name }}</li>

3.拼接生成唯一 key

<!-- ✅ 组合唯一 -->
<li v-for="item in list" :key="`${item.type}-${item.seq}`">{{ item.name }}</li>

三兜底:去重或加前缀

1.后端数据重复 → 前端去重

// 去重保持顺序
const uniqueList = list.filter((item, idx, arr) => idx === arr.findIndex(t => t.id === item.id))

2.临时数据加时间戳前缀

// 临时追加
const tempItem = { ...item, tempId: Date.now() + Math.random() }

性能对比(DevTools)

key 策略插入/删除后行为性能
索引节点复用错误❌ 最差
唯一 id精准复用✅ 最优
拼接唯一同上✅ 最优

一句话总结

“Duplicate keys” = v-for 里 key 重复。

唯一且稳定的字段(id、组合键)当 key,索引只在静态列表使用,警告立刻消失。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文