7
7
type Link ,
8
8
type Subscriber ,
9
9
SubscriberFlags ,
10
- checkDirty ,
11
10
endTrack ,
11
+ isDirty ,
12
12
startTrack ,
13
13
} from './system'
14
14
import { warn } from './warning'
@@ -121,8 +121,7 @@ export class ReactiveEffect<T = any> implements IEffect, ReactiveEffectOptions {
121
121
}
122
122
cleanupEffect ( this )
123
123
const prevSub = activeSub
124
- const prevTrackId = activeTrackId
125
- setActiveSub ( this , nextTrackId ( ) )
124
+ setActiveSub ( this )
126
125
startTrack ( this )
127
126
128
127
try {
@@ -134,7 +133,7 @@ export class ReactiveEffect<T = any> implements IEffect, ReactiveEffectOptions {
134
133
'this is likely a Vue internal bug.' ,
135
134
)
136
135
}
137
- setActiveSub ( prevSub , prevTrackId )
136
+ setActiveSub ( prevSub )
138
137
endTrack ( this )
139
138
if (
140
139
this . flags & SubscriberFlags . Recursed &&
@@ -157,19 +156,7 @@ export class ReactiveEffect<T = any> implements IEffect, ReactiveEffectOptions {
157
156
}
158
157
159
158
get dirty ( ) : boolean {
160
- const flags = this . flags
161
- if ( flags & SubscriberFlags . Dirty ) {
162
- return true
163
- } else if ( flags & SubscriberFlags . ToCheckDirty ) {
164
- if ( checkDirty ( this . deps ! ) ) {
165
- this . flags |= SubscriberFlags . Dirty
166
- return true
167
- } else {
168
- this . flags &= ~ SubscriberFlags . ToCheckDirty
169
- return false
170
- }
171
- }
172
- return false
159
+ return isDirty ( this , this . flags )
173
160
}
174
161
}
175
162
@@ -214,15 +201,14 @@ export function stop(runner: ReactiveEffectRunner): void {
214
201
runner . effect . stop ( )
215
202
}
216
203
217
- const resetTrackingStack : [ sub : typeof activeSub , trackId : number ] [ ] = [ ]
204
+ const resetTrackingStack : ( Subscriber | undefined ) [ ] = [ ]
218
205
219
206
/**
220
207
* Temporarily pauses tracking.
221
208
*/
222
209
export function pauseTracking ( ) : void {
223
- resetTrackingStack . push ( [ activeSub , activeTrackId ] )
210
+ resetTrackingStack . push ( activeSub )
224
211
activeSub = undefined
225
- activeTrackId = 0
226
212
}
227
213
228
214
/**
@@ -233,14 +219,14 @@ export function enableTracking(): void {
233
219
if ( ! isPaused ) {
234
220
// Add the current active effect to the trackResetStack so it can be
235
221
// restored by calling resetTracking.
236
- resetTrackingStack . push ( [ activeSub , activeTrackId ] )
222
+ resetTrackingStack . push ( activeSub )
237
223
} else {
238
224
// Add a placeholder to the trackResetStack so we can it can be popped
239
225
// to restore the previous active effect.
240
- resetTrackingStack . push ( [ undefined , 0 ] )
226
+ resetTrackingStack . push ( undefined )
241
227
for ( let i = resetTrackingStack . length - 1 ; i >= 0 ; i -- ) {
242
- if ( resetTrackingStack [ i ] [ 0 ] !== undefined ) {
243
- ; [ activeSub , activeTrackId ] = resetTrackingStack [ i ]
228
+ if ( resetTrackingStack [ i ] !== undefined ) {
229
+ activeSub = resetTrackingStack [ i ]
244
230
break
245
231
}
246
232
}
@@ -258,10 +244,9 @@ export function resetTracking(): void {
258
244
)
259
245
}
260
246
if ( resetTrackingStack . length ) {
261
- ; [ activeSub , activeTrackId ] = resetTrackingStack . pop ( ) !
247
+ activeSub = resetTrackingStack . pop ( ) !
262
248
} else {
263
249
activeSub = undefined
264
- activeTrackId = 0
265
250
}
266
251
}
267
252
@@ -304,14 +289,7 @@ function cleanupEffect(e: ReactiveEffect) {
304
289
}
305
290
306
291
export let activeSub : Subscriber | undefined = undefined
307
- export let activeTrackId = 0
308
- export let lastTrackId = 0
309
- export const nextTrackId = ( ) : number => ++ lastTrackId
310
-
311
- export function setActiveSub (
312
- sub : Subscriber | undefined ,
313
- trackId : number ,
314
- ) : void {
292
+
293
+ export function setActiveSub ( sub : Subscriber | undefined ) : void {
315
294
activeSub = sub
316
- activeTrackId = trackId
317
295
}
0 commit comments