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[] 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') const enterCbKey: unique symbol = Symbol('_enterCb')
export interface BaseTransitionProps<HostElement = RendererElement> { export interface BaseTransitionProps<HostElement = RendererElement> {

View File

@ -85,7 +85,7 @@ import { initFeatureFlags } from './featureFlags'
import { isAsyncWrapper } from './apiAsyncComponent' import { isAsyncWrapper } from './apiAsyncComponent'
import { isCompatEnabled } from './compat/compatConfig' import { isCompatEnabled } from './compat/compatConfig'
import { DeprecationTypes } 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> { export interface Renderer<HostElement = RendererElement> {
render: RootRenderFunction<HostElement> render: RootRenderFunction<HostElement>
@ -2057,6 +2057,9 @@ function baseCreateRenderer(
} }
} }
const performLeave = () => { const performLeave = () => {
if (el!._isLeaving) {
el![leaveCbKey](true /* cancelled */)
}
leave(el!, () => { leave(el!, () => {
remove() remove()
afterLeave && afterLeave() afterLeave && afterLeave()