Skip to content

Commit 7561b94

Browse files
coolzjyyyx990803
authored andcommitted
warn against non-primitive key (#5816)
1 parent 68522cf commit 7561b94

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

src/core/vdom/create-element.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,16 @@ export function _createElement (
6161
// in case of component :is set to falsy value
6262
return createEmptyVNode()
6363
}
64+
// warn against non-primitive key
65+
if (process.env.NODE_ENV !== 'production' &&
66+
isDef(data) && isDef(data.key) && !isPrimitive(data.key)
67+
) {
68+
warn(
69+
'Avoid using non-primitive value as key, ' +
70+
'use string/number value instead.',
71+
context
72+
)
73+
}
6474
// support single function children as default scoped slot
6575
if (Array.isArray(children) &&
6676
typeof children[0] === 'function'

test/unit/modules/vdom/create-element.spec.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,15 @@ describe('create-element', () => {
153153
expect('Avoid using observed data object as vnode data').toHaveBeenWarned()
154154
})
155155

156+
it('warn non-primitive key', () => {
157+
new Vue({
158+
render (h) {
159+
return h('div', { key: {}})
160+
}
161+
}).$mount()
162+
expect('Avoid using non-primitive value as key').toHaveBeenWarned()
163+
})
164+
156165
it('nested child elements should be updated correctly', done => {
157166
const vm = new Vue({
158167
data: { n: 1 },

0 commit comments

Comments
 (0)