Преглед изворни кода

fix(runtime-core): set scope id before props (#6948)

close #6923
Also ensure consistency with Vue 2
Zollero пре 3 година
родитељ
комит
da2ced1533

+ 3 - 3
packages/runtime-core/__tests__/scopeId.spec.ts

@@ -126,7 +126,7 @@ describe('scopeId runtime support', () => {
     const root = nodeOps.createElement('div')
     render(h(Root), root)
     expect(serializeInner(root)).toBe(
-      `<div class="wrapper" wrapper slotted root>` +
+      `<div wrapper slotted root class="wrapper">` +
         `<div root slotted-s>hoisted</div>` +
         `<div root slotted-s>dynamic</div>` +
         `</div>`
@@ -152,8 +152,8 @@ describe('scopeId runtime support', () => {
     const root2 = nodeOps.createElement('div')
     render(h(Root2), root2)
     expect(serializeInner(root2)).toBe(
-      `<div class="wrapper" wrapper slotted root>` +
-        `<div class="wrapper" wrapper root slotted-s>` +
+      `<div wrapper slotted root class="wrapper">` +
+        `<div wrapper root slotted-s class="wrapper">` +
         `<div root>hoisted</div>` +
         `<div root>dynamic</div>` +
         `</div>` +

+ 2 - 2
packages/runtime-core/src/renderer.ts

@@ -646,6 +646,8 @@ function baseCreateRenderer(
     if (dirs) {
       invokeDirectiveHook(vnode, null, parentComponent, 'created')
     }
+    // scopeId
+    setScopeId(el, vnode, vnode.scopeId, slotScopeIds, parentComponent)
     // props
     if (props) {
       for (const key in props) {
@@ -679,8 +681,6 @@ function baseCreateRenderer(
         invokeVNodeHook(vnodeHook, parentComponent, vnode)
       }
     }
-    // scopeId
-    setScopeId(el, vnode, vnode.scopeId, slotScopeIds, parentComponent)
 
     if (__DEV__ || __FEATURE_PROD_DEVTOOLS__) {
       Object.defineProperty(el, '__vnode', {