From: Evan You Date: Fri, 9 Oct 2020 13:08:59 +0000 (-0400) Subject: fix(teleport): should only force remove teleport when not disabled X-Git-Tag: v3.0.1~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b0931dcabaa2858ba76102f49878771ec14fb2e8;p=thirdparty%2Fvuejs%2Fcore.git fix(teleport): should only force remove teleport when not disabled fix #2323 --- diff --git a/packages/runtime-core/src/components/Teleport.ts b/packages/runtime-core/src/components/Teleport.ts index dae83eea61..1b43061642 100644 --- a/packages/runtime-core/src/components/Teleport.ts +++ b/packages/runtime-core/src/components/Teleport.ts @@ -20,7 +20,7 @@ export interface TeleportProps { export const isTeleport = (type: any): boolean => type.__isTeleport -const isTeleportDisabled = (props: VNode['props']): boolean => +export const isTeleportDisabled = (props: VNode['props']): boolean => props && (props.disabled || props.disabled === '') const resolveTarget = ( diff --git a/packages/runtime-core/src/renderer.ts b/packages/runtime-core/src/renderer.ts index 3baea539a8..4cd7ccc27c 100644 --- a/packages/runtime-core/src/renderer.ts +++ b/packages/runtime-core/src/renderer.ts @@ -56,7 +56,11 @@ import { queueEffectWithSuspense, SuspenseImpl } from './components/Suspense' -import { TeleportImpl, TeleportVNode } from './components/Teleport' +import { + isTeleportDisabled, + TeleportImpl, + TeleportVNode +} from './components/Teleport' import { isKeepAlive, KeepAliveContext } from './components/KeepAlive' import { registerHMR, unregisterHMR, isHmrUpdating } from './hmr' import { @@ -2037,8 +2041,11 @@ function baseCreateRenderer( unmountChildren(children as VNode[], parentComponent, parentSuspense) } - // an unmounted teleport should always remove its children - if (shapeFlag & ShapeFlags.TELEPORT) { + // an unmounted teleport should always remove its children if not disabled + if ( + shapeFlag & ShapeFlags.TELEPORT && + (doRemove || !isTeleportDisabled(vnode.props)) + ) { ;(vnode.type as typeof TeleportImpl).remove(vnode, internals) }