Skip to content

Commit d536488

Browse files
feat: vShow pauses effect when hidden
1 parent 5a279be commit d536488

File tree

1 file changed

+12
-1
lines changed
  • packages/runtime-dom/src/directives

1 file changed

+12
-1
lines changed

packages/runtime-dom/src/directives/vShow.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { ObjectDirective } from '@vue/runtime-core'
1+
import { ObjectDirective, type VNode } from '@vue/runtime-core'
2+
import { ShapeFlags } from '@vue/shared'
23

34
export const vShowOldKey = Symbol('_vod')
45

@@ -43,6 +44,16 @@ export const vShow: ObjectDirective<VShowElement> = {
4344
}
4445

4546
function setDisplay(el: VShowElement, value: unknown): void {
47+
// @ts-expect-error
48+
const vnode = el.__vnode as VNode
49+
if (vnode && vnode.shapeFlag & ShapeFlags.COMPONENT) {
50+
const effect = vnode.ctx!.effect
51+
if (value) {
52+
effect.resume(true)
53+
} else {
54+
effect.pause()
55+
}
56+
}
4657
el.style.display = value ? el[vShowOldKey] : 'none'
4758
}
4859

0 commit comments

Comments
 (0)