Просмотр исходного кода

fix(warning): allow symbol as vdom key (#7271)

Herrington Darkholme 8 лет назад
Родитель
Сommit
bacb911f7d
3 измененных файлов с 12 добавлено и 1 удалено
  1. 1 1
      src/core/vdom/patch.js
  2. 2 0
      src/shared/util.js
  3. 9 0
      test/unit/modules/vdom/create-element.spec.js

+ 1 - 1
src/core/vdom/patch.js

@@ -270,7 +270,7 @@ export function createPatchFunction (backend) {
         createElm(children[i], insertedVnodeQueue, vnode.elm, null, true)
       }
     } else if (isPrimitive(vnode.text)) {
-      nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(vnode.text))
+      nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)))
     }
   }
 

+ 2 - 0
src/shared/util.js

@@ -27,6 +27,8 @@ export function isPrimitive (value: any): boolean %checks {
   return (
     typeof value === 'string' ||
     typeof value === 'number' ||
+    // $flow-disable-line
+    typeof value === 'symbol' ||
     typeof value === 'boolean'
   )
 }

+ 9 - 0
test/unit/modules/vdom/create-element.spec.js

@@ -215,6 +215,15 @@ describe('create-element', () => {
     expect('Avoid using non-primitive value as key').not.toHaveBeenWarned()
   })
 
+  it('doesn\'t warn symbol key', () => {
+    new Vue({
+      render (h) {
+        return h('div', { key: Symbol('symbol') })
+      }
+    }).$mount()
+    expect('Avoid using non-primitive value as key').not.toHaveBeenWarned()
+  })
+
   it('nested child elements should be updated correctly', done => {
     const vm = new Vue({
       data: { n: 1 },