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

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

fix vitejs/vite#536
underfin 5 лет назад
Родитель
Сommit
583a1c7b45
1 измененных файлов с 6 добавлено и 2 удалено
  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)
     }