diff --git a/packages/runtime-core/__tests__/vnode.spec.ts b/packages/runtime-core/__tests__/vnode.spec.ts index 1a500ac7c8e..8895938182f 100644 --- a/packages/runtime-core/__tests__/vnode.spec.ts +++ b/packages/runtime-core/__tests__/vnode.spec.ts @@ -38,6 +38,14 @@ describe('vnode', () => { expect(vnode.props).toBe(null) }) + test('valid vnode keys', () => { + let vnode + for (const key in ['', '1', -1, 0, 1, null]) { + vnode = createVNode('div', { key }) + expect(vnode.key).toBe(key) + } + }) + describe('class normalization', () => { test('string', () => { const vnode = createVNode('p', { class: 'foo baz' }) diff --git a/packages/runtime-core/src/vnode.ts b/packages/runtime-core/src/vnode.ts index 568052a4b07..46089491191 100644 --- a/packages/runtime-core/src/vnode.ts +++ b/packages/runtime-core/src/vnode.ts @@ -251,7 +251,7 @@ export function createVNode( _isVNode: true, type, props, - key: (props !== null && props.key) || null, + key: props !== null && props.key !== undefined ? props.key : null, ref: (props !== null && props.ref) || null, scopeId: currentScopeId, children: null,