您好!欢迎来到源码码网

Element Plus报Duplicate keys found during update:”108”Make sure keys are unique错误的解决方案

  • 源码教程
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2025-12-18 11:40
  • 阅读:212

近日在使用Element Plus开发的时候,在自定义了CustomTreeSelect后,控制台频繁的报以下错误:

image.png

找到最终的错误原因是来自于select.vue的错误警告,如下。

Duplicate keys found during update:"108"Make sure keys are unique.
2
Duplicate keys found during update:"109"Make sure keys are unique.
Duplicate keys found during update:"124"Make sure keys are unique.
Duplicate keys found during update:"122"Make sure keys are unique.
Duplicate keys found during update:"113"Make sure keys are unique.
Duplicate keys found during update:"102"Make sure keys are unique.
Duplicate keys found during update:"101"Make sure keys are unique.
Duplicate keys found during update:"118"Make sure keys are unique.
2
Duplicate keys found during update:"120"Make sure keys are unique.
Duplicate keys found during update:"116"Make sure keys are unique.
2
Duplicate keys found during update:"117"Make sure keys are unique.
Duplicate keys found during update:"92"Make sure keys are unique.
Duplicate keys found during update:"91"Make sure keys are unique.
2
Duplicate keys found during update:"121"Make sure keys are unique.
Duplicate keys found during update:"90"Make sure keys are unique.
Duplicate keys found during update:"89"Make sure keys are unique.
2
Duplicate keys found during update:"105"Make sure keys are unique.
2
Duplicate keys found during update:"96"Make sure keys are unique.
Duplicate keys found during update:"88"Make sure keys are unique.
Duplicate keys found during update:"94"Make sure keys are unique.

在deepseek和豆包的建议下,经过反复的对自定义组件的修改,但是问题始终没有得到解决,但是它又不影响功能的正常使用,只是在组件编辑更新,自动折叠展开的时候才会出现这个问题,于是可以肯定,这个问题是来自于elment-plus的底层设计问题,采用精准屏蔽的方式消除该警告。在main.js文件中加入一下屏蔽代码,以下是具体屏蔽方法:

//1. 保存原始 console.warn
const originalWarn = console.warn;
// 2. 重写 warn,匹配警告核心文本(去掉对 select.vue 的依赖)
console.warn = function (...args) {
    // 匹配条件:包含 "Duplicate keys found during update" 即可
    const warnMsg = args[0] || '';
    if (warnMsg.includes('Duplicate keys found during update')) {
        // 可选:打印到控制台但不抛出警告(方便调试)
        // console.log('[屏蔽的重复key警告]', ...args);
        return; // 彻底屏蔽
    }
    // 其他警告正常输出
    originalWarn.apply(console, args);
};
// 3. 覆盖 Vue 内部的 warnHandler(Element Plus 可能走这个通道)
app.config.warnHandler = (msg, instance, trace) => {
    if (msg.includes('Duplicate keys found during update')) {
        return;
    }
    originalWarn(`[Vue warn]: ${msg}`, trace);
};


那么,为什么会出现这样的问题呢?以下是豆包给出的分析:

一、为什么 Element Plus 会 “无意义” 抛出这个警告?

这个警告本质是 Element Plus 组件设计的「逻辑漏洞」 —— 警告本身是 “误报”,但组件库的渲染机制导致无法避免,核心原因有 3 点:


1. el-select + el-tree 嵌套的「渲染模型冲突」

el-select 的下拉框是通过 teleport 挂载到 <body> 下的独立 DOM 容器(脱离当前组件 DOM 树);

el-tree 是动态递归渲染的树形组件,折叠 / 展开时会频繁增删子节点;

当你操作树节点时,el-select 会感知到下拉框内的 DOM 变化并触发 “更新检查”,但 Vue 对「跨容器(teleport)的动态节点」的 key 跟踪机制存在缺陷 —— 明明节点 key 是唯一的,却误判为 “重复”,进而抛出警告。


2. Element Plus 内部的 v-for 索引 key 兜底逻辑

你之前看到的 select.vue 源码中,ElOption 的渲染用了 v-for="(item, index) in options" :key="index" —— 这是 Element Plus 为了兼容 “任意格式数据源” 的兜底逻辑:

即使你传入的 options 有唯一 value,组件内部仍会用 index 作为 ElOption 的 fallback key;

当树形数据动态更新时,index 会临时重复(比如折叠后子节点消失,展开后又出现),触发 Vue 的重复 key 检查,而 Element Plus 并未对这种嵌套场景做 “警告豁免”。


3. 警告是「Vue 底层的通用检查」,组件库未做过滤

这个警告并非 Element Plus 主动抛出,而是 Vue 内核对 v-for 渲染的通用检查:

Vue 会遍历所有带 key 的 DOM 节点,只要检测到同一层级有重复 key,就会调用 console.warn;

Element Plus 知道 el-select + el-tree 嵌套会触发这个误报,但出于 “不屏蔽通用警告” 的设计原则(避免掩盖真问题),并未在组件内过滤,最终导致警告暴露到控制台。


二、为什么警告 “不影响功能”?

因为这个警告是 “渲染层的误判”,而非 “业务逻辑错误”:

功能层面:你的 deptId 是唯一的,el-tree 的 node-key 能正确跟踪节点状态(选中、折叠 / 展开、编辑后更新),数据交互、接口调用、状态同步都不受影响;

渲染层面:Vue 即使检测到 “重复 key”,也会做「兜底处理」—— 强制重新渲染节点,虽然有性能损耗(微乎其微),但不会导致 DOM 错乱或功能异常;

简单说:Vue 只是 “提醒你可能有问题”,但实际没有问题,组件库也知道这个场景下的提醒是多余的,只是没做过滤。


三、补充:什么时候这个警告才是 “真问题”?

只有满足以下场景时,这个警告才需要重视(你的场景完全不满足):

你手动写的 v-for 用了重复 key(比如列表渲染时 :key="index" 且数据有重复);

业务数据真的有重复 ID(比如 deptId 重复),导致节点状态错乱(选中错节点、折叠后数据不更新);

警告伴随功能异常(比如编辑后数据不刷新、新增子部门后下拉框空白)。


四、总结

这个警告是 Element Plus 组件库设计缺陷 + Vue 通用检查机制 叠加的 “误报”:

对开发者:无功能影响,只是控制台噪音,屏蔽即可;

对组件库:是已知的 “小瑕疵”,但修复成本高(需要修改 el-select 的 teleport 渲染逻辑 + 对 el-tree 嵌套场景做特殊 key 处理),因此长期未修复;

你的处理方式(精准屏蔽)是当前最优解 —— 既不影响功能,又消除控制台干扰,且不会掩盖其他真问题(因为只屏蔽了 “Duplicate keys found during update” 这一条警告)。

简单说:这是组件库的 “锅”,不是自己代码问题,屏蔽是合理且安全的选择。


特别声明:
1、如无特殊说明,内容均为本站原创发布,转载请注明出处;
2、部分转载文章已注明出处,转载目的为学习和交流,如有侵犯,请联系客服删除;
3、编辑非《源码码网》的文章均由用户编辑发布,不代表本站立场,如涉及侵犯,请联系删除;
全部评论(0)
推荐阅读
  • 常用测试压力工具使用介绍
  • 常用测试压力工具使用介绍
  • ab 是 ApacheBench 工具的缩写,它是一个HTTP压力测试工具。让我详细说明如何测试:1. 安装ApacheBenchWindows系统:方法一:安装XAMPP或WAMP(自带ab)下载地址:https://www.apachefriends.org/zh_cn/index.html安装后,ab工具在:C:xamppapacheinab.exe方法二:使
  • 开发工具
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-13 20:27
  • 阅读:74
  • 工程项目一体化自动管理软件解决方案
  • 工程项目一体化自动管理软件解决方案
  • 1.项目概述1.1项目背景在工程建设行业数字化转型浪潮下,传统项目管理面临信息孤岛、协同困难、进度不可控、成本超支等痛点。本方案旨在构建一个覆盖工程项目全生命周期、全参与方、全业务流程的一体化智能管理平台。1.2解决方案愿景打造数据驱动、智能协同、风险预警、自动执行的工程大脑,实现:管理流程自动化率≥80%项目协同效率提升40%成本偏差率降低至±3%以内安全事故发生率降低60%1.3目标用户矩阵┌───────────────┬
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-09 11:26
  • 阅读:188
  • 车辆管理系统需求文档与技术架构PC端+小程序
  • 车辆管理系统需求文档与技术架构PC端+小程序
  • 第一部分:需求文档1.项目概述1.1项目背景为企事业单位、车队运营商、租赁公司等提供一套完整的车辆全生命周期管理解决方案,实现车辆管理数字化、智能化。1.2项目目标建立车辆从购置到报废的全流程管理体系实现用车申请、调度、监控、结算的闭环管理通过数据分析优化车辆使用效率降低车辆运维成本20%以上1.3用户角色矩阵┌──────────────┬─────────────────────────────┬──────────────
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-09 11:11
  • 阅读:181
  • 智慧农业/渔业物联网系统需求文档
  • 智慧农业/渔业物联网系统需求文档
  • 智慧农业/渔业物联网系统需求文档文档版本: V1.0项目目标: 构建一个集环境智能监测、设备自动化控制、生长模型分析、溯源管理与远程指挥于一体的综合物联网管理平台,实现降本增效、提质增产、风险预警与品牌增值。1.系统总体概述1.1核心价值: 数据驱动决策,解放人力,实现农业/渔业生产的精准化、自动化与智能化。1.2用户角色:生产员/养殖员: 现场巡视、接收告警、执行设备手动控制、查看实时环境
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-09 11:04
  • 阅读:84
  • 程序员AI编程工具推荐
  • 程序员AI编程工具推荐
  • AI编程工具是当前开发者的“副驾驶”,能够极大提升开发效率。以下我将从通用型、代码专用型、垂直领域型以及开源/自部署型几个维度为您分类推荐,并附上它们的核心特点和适用场景,帮助您选择。一、通用型AI对话助手(编程是核心能力之一)这类工具本质是“更懂代码的ChatGPT”,适合处理广泛的编程问题、解释代码、生成文档等。ChatGPT(GPT-4/4o)简介:行业标杆,尤其在GPT-4版本下,代码理解和生成能力极强。优点:上下文能力强,
  • 源码教程
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-09 10:56
  • 阅读:113
联系客服
源码代售 源码咨询 技术开发 联系客服
029-84538663
手机版

扫一扫进手机版
返回顶部