Vue.js報錯:Duplicate?keys?detected:‘xxx‘問題的解決
更新時間:2025年11月08日 09:20:59 作者:JJCTO袁龍
文章介紹了在Vue.js中解決`Duplicate?keys?detected`錯誤的步驟,包括定位重復的key、確保key的唯一性以及在必要時進行去重或添加前綴,同時,文章還提供了一個性能對比,建議在`v-for`中使用唯一且穩(wěn)定的字段作為key,索引只在靜態(tài)列表中使用,以避免警告并提升性能
Vue.js 報錯:Duplicate keys detected: ‘xxx’
當你在控制臺看到:
[Vue warn]: Duplicate keys detected: 'xxx'. This may cause an update error.
Vue 在告訴你:
「你在 v-for 里用了重復的 key,可能會導致渲染錯亂或性能下降?!?/strong>
按「一看二改三兜底」三步法,3 分鐘解決。
一看:定位重復 key
控制臺會打印出 重復的具體值 和 組件名,點擊堆棧即可跳轉到 v-for 所在行。
二改:讓 key 真正唯一
1.用數據庫主鍵或唯一字段
<!-- ? 唯一且穩(wěn)定 -->
<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 策略 | 插入/刪除后行為 | 性能 |
|---|---|---|
| 索引 | 節(jié)點復用錯誤 | ? 最差 |
| 唯一 id | 精準復用 | ? 最優(yōu) |
| 拼接唯一 | 同上 | ? 最優(yōu) |
一句話總結
“Duplicate keys” = v-for 里 key 重復。
用唯一且穩(wěn)定的字段(id、組合鍵)當 key,索引只在靜態(tài)列表使用,警告立刻消失。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

