Skip to content

Commit 285f274

Browse files
committed
fix(transition): skip enter guard while hmr updating
1 parent d61d803 commit 285f274

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { onBeforeUnmount, onMounted } from '../apiLifecycle'
2121
import { isTeleport } from './Teleport'
2222
import type { RendererElement } from '../renderer'
2323
import { SchedulerJobFlags } from '../scheduler'
24+
import { isHmrUpdating } from '../hmr'
2425

2526
type Hook<T = () => void> = T | T[]
2627

@@ -401,7 +402,7 @@ export function resolveTransitionHooks(
401402

402403
enter(el) {
403404
// prevent enter if leave is in progress
404-
if (leavingVNodesCache[key] === vnode) return
405+
if (!isHmrUpdating && leavingVNodesCache[key] === vnode) return
405406
let hook = onEnter
406407
let afterHook = onAfterEnter
407408
let cancelHook = onEnterCancelled

packages/runtime-core/src/hmr.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@ type HMRComponent = ComponentOptions | ClassComponent
1414

1515
export let isHmrUpdating = false
1616

17+
export const setHmrUpdating = (v: boolean): boolean => {
18+
try {
19+
return isHmrUpdating
20+
} finally {
21+
isHmrUpdating = v
22+
}
23+
}
24+
1725
export const hmrDirtyComponents: Map<
1826
ConcreteComponent,
1927
Set<ComponentInternalInstance>

packages/runtime-core/src/renderer.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,12 @@ import {
7171
type TeleportVNode,
7272
} from './components/Teleport'
7373
import { type KeepAliveContext, isKeepAlive } from './components/KeepAlive'
74-
import { isHmrUpdating, registerHMR, unregisterHMR } from './hmr'
74+
import {
75+
isHmrUpdating,
76+
registerHMR,
77+
setHmrUpdating,
78+
unregisterHMR,
79+
} from './hmr'
7580
import { type RootHydrateFunction, createHydrationFunctions } from './hydration'
7681
import { invokeDirectiveHook } from './directives'
7782
import { endMeasure, startMeasure } from './profiling'
@@ -733,10 +738,14 @@ function baseCreateRenderer(
733738
needCallTransitionHooks ||
734739
dirs
735740
) {
741+
const isHmr = __DEV__ && isHmrUpdating
736742
queuePostRenderEffect(() => {
743+
let prev
744+
if (__DEV__) prev = setHmrUpdating(isHmr)
737745
vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode)
738746
needCallTransitionHooks && transition!.enter(el)
739747
dirs && invokeDirectiveHook(vnode, null, parentComponent, 'mounted')
748+
if (__DEV__) setHmrUpdating(prev!)
740749
}, parentSuspense)
741750
}
742751
}

0 commit comments

Comments
 (0)