Meituan-Dianping/mpvue · error
It seems there are duplicate keys that is causing an update
Error message
It seems there are duplicate keys that is causing an update error. Make sure each v-for item has a unique key.
What it means
Runtime warning emitted from the vdom patch algorithm (updateChildren) when list diffing cannot make progress, typically because duplicate or missing keys make sameVnode comparisons match wrong nodes. It signals the v-for list keys are not unique, which corrupts the keyed diff and can throw errors during element reuse.
Source
Thrown at packages/mpvue/index.js:4719
canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));
oldStartVnode = oldCh[++oldStartIdx];
newEndVnode = newCh[--newEndIdx];
} else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left
patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue);
canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);
oldEndVnode = oldCh[--oldEndIdx];
newStartVnode = newCh[++newStartIdx];
} else {
if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }
idxInOld = isDef(newStartVnode.key) ? oldKeyToIdx[newStartVnode.key] : null;
if (isUndef(idxInOld)) { // New element
createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm);
newStartVnode = newCh[++newStartIdx];
} else {
elmToMove = oldCh[idxInOld];
/* istanbul ignore if */
if ("production" !== 'production' && !elmToMove) {
warn(
'It seems there are duplicate keys that is causing an update error. ' +
'Make sure each v-for item has a unique key.'
);
}
if (sameVnode(elmToMove, newStartVnode)) {
patchVnode(elmToMove, newStartVnode, insertedVnodeQueue);
oldCh[idxInOld] = undefined;
canMove && nodeOps.insertBefore(parentElm, elmToMove.elm, oldStartVnode.elm);
newStartVnode = newCh[++newStartIdx];
} else {
// same key but different element. treat as new element
createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm);
newStartVnode = newCh[++newStartIdx];
}
}
}
}
if (oldStartIdx > oldEndIdx) {View on GitHub (pinned to 6c5d78ee04)
Solutions
- Give each v-for item a unique, stable :key (e.g. item.id)
- Never use array index as key for mutable/reorderable lists
- Deduplicate data before rendering if source data has repeated ids
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at packages/mpvue/index.js:4719 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of Meituan-Dianping/mpvue@6c5d78ee04 (2026-09-02).
Data as JSON: /api/errors/9be1975e5b4622e7.
Report an issue: GitHub.