fix(Transition): handle KeepAlive + transition leaving edge case

This commit is contained in:
daiwei 2025-04-02 22:01:20 +08:00
parent 466b30f404
commit 16deaafc2c
2 changed files with 5 additions and 2 deletions

View File

@ -24,7 +24,7 @@ import { SchedulerJobFlags } from '../scheduler'
type Hook<T = () => 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<HostElement = RendererElement> {

View File

@ -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<HostElement = RendererElement> {
render: RootRenderFunction<HostElement>
@ -2057,6 +2057,9 @@ function baseCreateRenderer(
}
}
const performLeave = () => {
if (el!._isLeaving) {
el![leaveCbKey](true /* cancelled */)
}
leave(el!, () => {
remove()
afterLeave && afterLeave()