@@ -39,6 +39,9 @@ export interface ReactiveEffectRunner<T = any> {
39
39
export let activeSub : Subscriber | undefined
40
40
41
41
export enum EffectFlags {
42
+ /**
43
+ * ReactiveEffect only
44
+ */
42
45
ACTIVE = 1 << 0 ,
43
46
RUNNING = 1 << 1 ,
44
47
TRACKING = 1 << 2 ,
@@ -66,6 +69,10 @@ export interface Subscriber extends DebuggerOptions {
66
69
* @internal
67
70
*/
68
71
flags : EffectFlags
72
+ /**
73
+ * @internal
74
+ */
75
+ next ?: Subscriber
69
76
/**
70
77
* @internal
71
78
*/
@@ -92,7 +99,7 @@ export class ReactiveEffect<T = any>
92
99
/**
93
100
* @internal
94
101
*/
95
- nextEffect ?: ReactiveEffect = undefined
102
+ next ?: Subscriber = undefined
96
103
/**
97
104
* @internal
98
105
*/
@@ -134,9 +141,7 @@ export class ReactiveEffect<T = any>
134
141
return
135
142
}
136
143
if ( ! ( this . flags & EffectFlags . NOTIFIED ) ) {
137
- this . flags |= EffectFlags . NOTIFIED
138
- this . nextEffect = batchedEffect
139
- batchedEffect = this
144
+ batch ( this )
140
145
}
141
146
}
142
147
@@ -226,7 +231,13 @@ export class ReactiveEffect<T = any>
226
231
// }
227
232
228
233
let batchDepth = 0
229
- let batchedEffect : ReactiveEffect | undefined
234
+ let batchedSub : Subscriber | undefined
235
+
236
+ export function batch ( sub : Subscriber ) : void {
237
+ sub . flags |= EffectFlags . NOTIFIED
238
+ sub . next = batchedSub
239
+ batchedSub = sub
240
+ }
230
241
231
242
/**
232
243
* @internal
@@ -245,16 +256,17 @@ export function endBatch(): void {
245
256
}
246
257
247
258
let error : unknown
248
- while ( batchedEffect ) {
249
- let e : ReactiveEffect | undefined = batchedEffect
250
- batchedEffect = undefined
259
+ while ( batchedSub ) {
260
+ let e : Subscriber | undefined = batchedSub
261
+ batchedSub = undefined
251
262
while ( e ) {
252
- const next : ReactiveEffect | undefined = e . nextEffect
253
- e . nextEffect = undefined
263
+ const next : Subscriber | undefined = e . next
264
+ e . next = undefined
254
265
e . flags &= ~ EffectFlags . NOTIFIED
255
266
if ( e . flags & EffectFlags . ACTIVE ) {
256
267
try {
257
- e . trigger ( )
268
+ // ACTIVE flag is effect-only
269
+ ; ( e as ReactiveEffect ) . trigger ( )
258
270
} catch ( err ) {
259
271
if ( ! error ) error = err
260
272
}
@@ -331,6 +343,7 @@ function isDirty(sub: Subscriber): boolean {
331
343
* @internal
332
344
*/
333
345
export function refreshComputed ( computed : ComputedRefImpl ) : undefined {
346
+ computed . flags &= ~ EffectFlags . NOTIFIED
334
347
if (
335
348
computed . flags & EffectFlags . TRACKING &&
336
349
! ( computed . flags & EffectFlags . DIRTY )
0 commit comments