fix(teleport): should only force remove teleport when not disabled

fix #2323
This commit is contained in:
Evan You 2020-10-09 09:08:59 -04:00
parent 54ed7592e4
commit b0931dcaba
2 changed files with 11 additions and 4 deletions

View File

@ -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 = <T = RendererElement>(

View File

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