diff --git a/packages/runtime-core/src/helpers/renderSlot.ts b/packages/runtime-core/src/helpers/renderSlot.ts index 0e4f09a3435..68e1edcbe3c 100644 --- a/packages/runtime-core/src/helpers/renderSlot.ts +++ b/packages/runtime-core/src/helpers/renderSlot.ts @@ -10,7 +10,7 @@ import { import { PatchFlags, SlotFlags } from '@vue/shared' import { warn } from '../warning' -export let isRenderingTemplateSlot = false +export let shouldTrackInSlotRendering = 0 /** * Compiler runtime helper for rendering `` @@ -39,7 +39,7 @@ export function renderSlot( // invocation interfering with template-based block tracking, but in // `renderSlot` we can be sure that it's template-based so we can force // enable it. - isRenderingTemplateSlot = true + shouldTrackInSlotRendering++ const rendered = (openBlock(), createBlock( Fragment, @@ -49,6 +49,6 @@ export function renderSlot( ? PatchFlags.STABLE_FRAGMENT : PatchFlags.BAIL )) - isRenderingTemplateSlot = false + shouldTrackInSlotRendering-- return rendered } diff --git a/packages/runtime-core/src/vnode.ts b/packages/runtime-core/src/vnode.ts index 2f5a6bfaca1..8eadedca27f 100644 --- a/packages/runtime-core/src/vnode.ts +++ b/packages/runtime-core/src/vnode.ts @@ -36,7 +36,7 @@ import { currentRenderingInstance } from './componentRenderUtils' import { RendererNode, RendererElement } from './renderer' import { NULL_DYNAMIC_COMPONENT } from './helpers/resolveAssets' import { hmrDirtyComponents } from './hmr' -import { isRenderingTemplateSlot } from './helpers/renderSlot' +import { shouldTrackInSlotRendering } from './helpers/renderSlot' export const Fragment = (Symbol(__DEV__ ? 'Fragment' : undefined) as any) as { __isFragment: true @@ -403,7 +403,7 @@ function _createVNode( normalizeChildren(vnode, children) if ( - (shouldTrack > 0 || isRenderingTemplateSlot) && + (shouldTrack > 0 || shouldTrackInSlotRendering > 0) && // avoid a block node from tracking itself !isBlockNode && // has current parent block