@@ -7,8 +7,6 @@ interface VShowElement extends HTMLElement {
7
7
[ vShowOriginalDisplay ] : string
8
8
}
9
9
10
- const resolvedPromise = Promise . resolve ( )
11
-
12
10
export const vShow : ObjectDirective < VShowElement > & { name ?: 'show' } = {
13
11
beforeMount ( el , { value } , { transition } ) {
14
12
el [ vShowOriginalDisplay ] =
@@ -24,17 +22,19 @@ export const vShow: ObjectDirective<VShowElement> & { name?: 'show' } = {
24
22
transition . enter ( el )
25
23
}
26
24
} ,
27
- updated ( el , { value, oldValue } , { transition } ) {
25
+ updated ( el , { value, oldValue } , { transition } , _ , postFlush ) {
28
26
if (
29
27
! value === ! oldValue &&
30
28
( el . style . display === el [ vShowOriginalDisplay ] || ( ! value && transition ) )
31
29
)
32
30
return
33
31
if ( transition ) {
34
32
if ( value ) {
35
- transition . beforeEnter ( el )
36
- setDisplay ( el , true )
37
- transition . enter ( el )
33
+ postFlush ! ( ( ) => {
34
+ transition . beforeEnter ( el )
35
+ setDisplay ( el , true )
36
+ transition . enter ( el )
37
+ } )
38
38
} else {
39
39
transition . leave ( el , ( ) => {
40
40
setDisplay ( el , false )
@@ -44,7 +44,9 @@ export const vShow: ObjectDirective<VShowElement> & { name?: 'show' } = {
44
44
// #10038
45
45
// when multi vShow be applied to the same element
46
46
// and the sync setDisplay will impact other vShow
47
- postSetDisplay ( el , value )
47
+ postFlush ! ( ( ) => {
48
+ setDisplay ( el , value )
49
+ } )
48
50
}
49
51
} ,
50
52
beforeUnmount ( el , { value } ) {
@@ -60,12 +62,6 @@ function setDisplay(el: VShowElement, value: unknown): void {
60
62
el . style . display = value ? el [ vShowOriginalDisplay ] : 'none'
61
63
}
62
64
63
- function postSetDisplay ( el : VShowElement , value : unknown ) : void {
64
- resolvedPromise . then ( ( ) => {
65
- setDisplay ( el , value )
66
- } )
67
- }
68
-
69
65
// SSR vnode transforms, only used when user includes client-oriented render
70
66
// function in SSR
71
67
export function initVShowForSSR ( ) {
0 commit comments