]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(runtime-core): avoid scopeId as attr for slot nodes with same scopeId (#1561)
authorunderfin <2218301630@qq.com>
Tue, 14 Jul 2020 21:06:39 +0000 (05:06 +0800)
committerGitHub <noreply@github.com>
Tue, 14 Jul 2020 21:06:39 +0000 (17:06 -0400)
fix vitejs/vite#536

packages/runtime-core/src/componentRenderUtils.ts

index 7f83875a7ccbf2188d293ab717da8288e691a875..9e854b265bbae81133c315f9a60bf035f8423515 100644 (file)
@@ -166,12 +166,16 @@ export function renderComponentRoot(
 
     // inherit scopeId
     const scopeId = vnode.scopeId
+    // vite#536: if subtree root is created from parent slot if would already
+    // have the correct scopeId, in this case adding the scopeId will cause
+    // it to be removed if the original slot vnode is reused.
+    const needScopeId = scopeId && root.scopeId !== scopeId
     const treeOwnerId = parent && parent.type.__scopeId
     const slotScopeId =
       treeOwnerId && treeOwnerId !== scopeId ? treeOwnerId + '-s' : null
-    if (scopeId || slotScopeId) {
+    if (needScopeId || slotScopeId) {
       const extras: Data = {}
-      if (scopeId) extras[scopeId] = ''
+      if (needScopeId) extras[scopeId] = ''
       if (slotScopeId) extras[slotScopeId] = ''
       root = cloneVNode(root, extras)
     }