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