File tree Expand file tree Collapse file tree 4 files changed +12
-3
lines changed Expand file tree Collapse file tree 4 files changed +12
-3
lines changed Original file line number Diff line number Diff line change @@ -195,7 +195,7 @@ describe('renderer: VaporTeleport', () => {
195
195
expect ( target . innerHTML ) . toBe ( '<div>teleported 2</div>' )
196
196
} )
197
197
198
- test . todo ( 'parent rerender + toggle disabled' , async ( ) => {
198
+ test ( 'parent rerender + toggle disabled' , async ( ) => {
199
199
const target = document . createElement ( 'div' )
200
200
const root = document . createElement ( 'div' )
201
201
const parentId = 'test3-parent-rerender'
Original file line number Diff line number Diff line change @@ -52,7 +52,7 @@ import {
52
52
resolveDynamicProps ,
53
53
setupPropsValidation ,
54
54
} from './componentProps'
55
- import { renderEffect } from './renderEffect'
55
+ import { type RenderEffect , renderEffect } from './renderEffect'
56
56
import { emit , normalizeEmitsOptions } from './componentEmits'
57
57
import { setDynamicProps } from './dom/prop'
58
58
import {
@@ -446,6 +446,7 @@ export class VaporComponentInstance implements GenericComponentInstance {
446
446
devtoolsRawSetupState ?: any
447
447
hmrRerender ?: ( ) => void
448
448
hmrReload ?: ( newComp : VaporComponent ) => void
449
+ renderEffects ?: RenderEffect [ ]
449
450
parentTeleport ?: TeleportFragment | null
450
451
propsOptions ?: NormalizedPropsOptions
451
452
emitsOptions ?: ObjectEmitsOptions | null
Original file line number Diff line number Diff line change @@ -21,6 +21,10 @@ export function hmrRerender(instance: VaporComponentInstance): void {
21
21
remove ( instance . block , parent )
22
22
const prev = setCurrentInstance ( instance )
23
23
pushWarningContext ( instance )
24
+ if ( instance . renderEffects ) {
25
+ instance . renderEffects . forEach ( e => e . stop ( ) )
26
+ instance . renderEffects = [ ]
27
+ }
24
28
devRender ( instance )
25
29
popWarningContext ( )
26
30
setCurrentInstance ( ...prev )
@@ -45,6 +49,7 @@ export function hmrReload(
45
49
)
46
50
setCurrentInstance ( ...prev )
47
51
mountComponent ( newInstance , parent , anchor )
52
+
48
53
updateParentBlockOnHmrReload ( parentInstance , instance , newInstance )
49
54
updateParentTeleportOnHmrReload ( instance , newInstance )
50
55
}
Original file line number Diff line number Diff line change @@ -11,7 +11,7 @@ import {
11
11
import { type VaporComponentInstance , isVaporComponent } from './component'
12
12
import { invokeArrayFns } from '@vue/shared'
13
13
14
- class RenderEffect extends ReactiveEffect {
14
+ export class RenderEffect extends ReactiveEffect {
15
15
i : VaporComponentInstance | null
16
16
job : SchedulerJob
17
17
updateJob : SchedulerJob
@@ -41,6 +41,9 @@ class RenderEffect extends ReactiveEffect {
41
41
this . onTrigger = instance . rtg
42
42
? e => invokeArrayFns ( instance . rtg ! , e )
43
43
: void 0
44
+
45
+ // hmr rerender needs to stop all effects under the current instance
46
+ ; ( instance . renderEffects || ( instance . renderEffects = [ ] ) ) . push ( this )
44
47
}
45
48
job . i = instance
46
49
}
You can’t perform that action at this time.
0 commit comments