From: daiwei Date: Thu, 30 Oct 2025 01:22:54 +0000 (+0800) Subject: fix(Transition): skip transition if el is hidden by v-show X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fheads%2Fedison%2Ffix%2F14031;p=thirdparty%2Fvuejs%2Fcore.git fix(Transition): skip transition if el is hidden by v-show --- diff --git a/packages/runtime-core/src/renderer.ts b/packages/runtime-core/src/renderer.ts index 89b8be6a18..1d408e9868 100644 --- a/packages/runtime-core/src/renderer.ts +++ b/packages/runtime-core/src/renderer.ts @@ -2054,7 +2054,9 @@ function baseCreateRenderer( const needTransition = moveType !== MoveType.REORDER && shapeFlag & ShapeFlags.ELEMENT && - transition + transition && + // #14031 skip transition hooks if el is hidden by v-show + !isHiddenByVShow(vnode) if (needTransition) { if (moveType === MoveType.ENTER) { transition!.beforeEnter(el!) @@ -2565,3 +2567,9 @@ export function invalidateMount(hooks: LifecycleHook): void { hooks[i].flags! |= SchedulerJobFlags.DISPOSED } } + +function isHiddenByVShow(vnode: VNode): boolean { + // @ts-expect-error vShow has this internal name + const vShowDir = vnode.dirs && vnode.dirs.find(dir => dir.name === 'show') + return !!(vShowDir && !vShowDir.value) +}