diff --git a/src/core/vdom/patch.js b/src/core/vdom/patch.js index 676499dc69e..a0743314e6f 100644 --- a/src/core/vdom/patch.js +++ b/src/core/vdom/patch.js @@ -543,6 +543,9 @@ export function createPatchFunction (backend) { if (isDef(oldCh) && isDef(ch)) { if (oldCh !== ch) updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly) } else if (isDef(ch)) { + if (process.env.NODE_ENV !== 'production') { + checkDuplicateKeys(ch) + } if (isDef(oldVnode.text)) nodeOps.setTextContent(elm, '') addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue) } else if (isDef(oldCh)) { diff --git a/test/unit/modules/vdom/patch/children.spec.js b/test/unit/modules/vdom/patch/children.spec.js index ec4d521955c..f42c5413edd 100644 --- a/test/unit/modules/vdom/patch/children.spec.js +++ b/test/unit/modules/vdom/patch/children.spec.js @@ -530,4 +530,16 @@ describe('vdom patch: children', () => { patch(vnode2, vnode3) expect(`Duplicate keys detected: 'b'`).toHaveBeenWarned() }) + + it('should warn with duplicate keys: patchVnode with empty oldVnode', () => { + function makeNode (key) { + return new VNode('li', { key: key }) + } + + const vnode1 = new VNode('div') + const vnode2 = new VNode('div', undefined, ['1', '2', '3', '4', '4'].map(makeNode)) + + patch(vnode1, vnode2) + expect(`Duplicate keys detected: '4'`).toHaveBeenWarned() + }) })