From: HcySunYang Date: Thu, 20 Aug 2020 13:37:26 +0000 (+0800) Subject: fix(runtime-core): correctly track dynamic nodes in renderSlot (#1911) X-Git-Tag: v3.0.0-rc.7~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7ffb79c56318861075a47bd2357e34cde8a6dad9;p=thirdparty%2Fvuejs%2Fcore.git fix(runtime-core): correctly track dynamic nodes in renderSlot (#1911) --- diff --git a/packages/runtime-core/src/helpers/renderSlot.ts b/packages/runtime-core/src/helpers/renderSlot.ts index 0e4f09a343..68e1edcbe3 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 2f5a6bfaca..8eadedca27 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