From 583a1c7b45e67e9cd57e411853c20509248def89 Mon Sep 17 00:00:00 2001 From: underfin <2218301630@qq.com> Date: Wed, 15 Jul 2020 05:06:39 +0800 Subject: [PATCH] fix(runtime-core): avoid scopeId as attr for slot nodes with same scopeId (#1561) fix vitejs/vite#536 --- packages/runtime-core/src/componentRenderUtils.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/runtime-core/src/componentRenderUtils.ts b/packages/runtime-core/src/componentRenderUtils.ts index 7f83875a7cc..9e854b265bb 100644 --- a/packages/runtime-core/src/componentRenderUtils.ts +++ b/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) }