diff --git a/packages/runtime-core/src/components/BaseTransition.ts b/packages/runtime-core/src/components/BaseTransition.ts index 2b58bc3fc..f8755e7e7 100644 --- a/packages/runtime-core/src/components/BaseTransition.ts +++ b/packages/runtime-core/src/components/BaseTransition.ts @@ -24,7 +24,7 @@ import { SchedulerJobFlags } from '../scheduler' type Hook void> = T | T[] -const leaveCbKey: unique symbol = Symbol('_leaveCb') +export const leaveCbKey: unique symbol = Symbol('_leaveCb') const enterCbKey: unique symbol = Symbol('_enterCb') export interface BaseTransitionProps { diff --git a/packages/runtime-core/src/renderer.ts b/packages/runtime-core/src/renderer.ts index 05c4ac345..b0201952c 100644 --- a/packages/runtime-core/src/renderer.ts +++ b/packages/runtime-core/src/renderer.ts @@ -85,7 +85,7 @@ import { initFeatureFlags } from './featureFlags' import { isAsyncWrapper } from './apiAsyncComponent' import { isCompatEnabled } from './compat/compatConfig' import { DeprecationTypes } from './compat/compatConfig' -import type { TransitionHooks } from './components/BaseTransition' +import { type TransitionHooks, leaveCbKey } from './components/BaseTransition' export interface Renderer { render: RootRenderFunction @@ -2057,6 +2057,9 @@ function baseCreateRenderer( } } const performLeave = () => { + if (el!._isLeaving) { + el![leaveCbKey](true /* cancelled */) + } leave(el!, () => { remove() afterLeave && afterLeave()