From b0931dcabaa2858ba76102f49878771ec14fb2e8 Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 9 Oct 2020 09:08:59 -0400 Subject: [PATCH] fix(teleport): should only force remove teleport when not disabled fix #2323 --- packages/runtime-core/src/components/Teleport.ts | 2 +- packages/runtime-core/src/renderer.ts | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/runtime-core/src/components/Teleport.ts b/packages/runtime-core/src/components/Teleport.ts index dae83eea6..1b4306164 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 3baea539a..4cd7ccc27 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) }