Skip to content

Commit 16deaaf

Browse files
committed
fix(Transition): handle KeepAlive + transition leaving edge case
1 parent 466b30f commit 16deaaf

File tree

2 files changed

+5
-2
lines changed

2 files changed

+5
-2
lines changed

packages/runtime-core/src/components/BaseTransition.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import { SchedulerJobFlags } from '../scheduler'
2424

2525
type Hook<T = () => void> = T | T[]
2626

27-
const leaveCbKey: unique symbol = Symbol('_leaveCb')
27+
export const leaveCbKey: unique symbol = Symbol('_leaveCb')
2828
const enterCbKey: unique symbol = Symbol('_enterCb')
2929

3030
export interface BaseTransitionProps<HostElement = RendererElement> {

packages/runtime-core/src/renderer.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ import { initFeatureFlags } from './featureFlags'
8585
import { isAsyncWrapper } from './apiAsyncComponent'
8686
import { isCompatEnabled } from './compat/compatConfig'
8787
import { DeprecationTypes } from './compat/compatConfig'
88-
import type { TransitionHooks } from './components/BaseTransition'
88+
import { type TransitionHooks, leaveCbKey } from './components/BaseTransition'
8989

9090
export interface Renderer<HostElement = RendererElement> {
9191
render: RootRenderFunction<HostElement>
@@ -2057,6 +2057,9 @@ function baseCreateRenderer(
20572057
}
20582058
}
20592059
const performLeave = () => {
2060+
if (el!._isLeaving) {
2061+
el![leaveCbKey](true /* cancelled */)
2062+
}
20602063
leave(el!, () => {
20612064
remove()
20622065
afterLeave && afterLeave()

0 commit comments

Comments
 (0)