Quellcode durchsuchen

fix(runtime-core): avoid scopeId as attr for slot nodes with same scopeId (#1561)

fix vitejs/vite#536
underfin vor 5 Jahren
Ursprung
Commit
583a1c7b45
1 geänderte Dateien mit 6 neuen und 2 gelöschten Zeilen
  1. 6 2
      packages/runtime-core/src/componentRenderUtils.ts

+ 6 - 2
packages/runtime-core/src/componentRenderUtils.ts

@@ -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)
     }