@@ -26,7 +26,6 @@ export type DebuggerEventExtraInfo = {
26
26
export let activeEffect : ReactiveEffect | undefined
27
27
28
28
export class ReactiveEffect < T = any > {
29
- active = true
30
29
deps : Dep [ ] = [ ]
31
30
32
31
/**
@@ -39,7 +38,6 @@ export class ReactiveEffect<T = any> {
39
38
*/
40
39
allowRecurse ?: boolean
41
40
42
- onStop ?: ( ) => void
43
41
// dev only
44
42
onTrack ?: ( event : DebuggerEvent ) => void
45
43
// dev only
@@ -105,9 +103,6 @@ export class ReactiveEffect<T = any> {
105
103
106
104
run ( ) {
107
105
this . _dirtyLevel = DirtyLevels . NotDirty
108
- if ( ! this . active ) {
109
- return this . fn ( )
110
- }
111
106
let lastShouldTrack = shouldTrack
112
107
let lastEffect = activeEffect
113
108
try {
@@ -123,6 +118,19 @@ export class ReactiveEffect<T = any> {
123
118
shouldTrack = lastShouldTrack
124
119
}
125
120
}
121
+ }
122
+
123
+ export class ReactiveSideEffect < T = any > extends ReactiveEffect < T > {
124
+ active = true
125
+
126
+ onStop ?: ( ) => void
127
+
128
+ run ( ) {
129
+ if ( ! this . active ) {
130
+ return this . fn ( )
131
+ }
132
+ return super . run ( )
133
+ }
126
134
127
135
stop ( ) {
128
136
if ( this . active ) {
@@ -177,7 +185,7 @@ export interface ReactiveEffectOptions extends DebuggerOptions {
177
185
178
186
export interface ReactiveEffectRunner < T = any > {
179
187
( ) : T
180
- effect : ReactiveEffect
188
+ effect : ReactiveSideEffect
181
189
}
182
190
183
191
/**
@@ -198,7 +206,7 @@ export function effect<T = any>(
198
206
fn = ( fn as ReactiveEffectRunner ) . effect . fn
199
207
}
200
208
201
- const _effect = new ReactiveEffect ( fn , NOOP , ( ) => {
209
+ const _effect = new ReactiveSideEffect ( fn , NOOP , ( ) => {
202
210
if ( _effect . dirty ) {
203
211
_effect . run ( )
204
212
}
0 commit comments