@@ -250,11 +250,29 @@ export function trigger(
250
250
return
251
251
}
252
252
253
- let deps : Dep [ ] = [ ]
253
+ const run = ( dep : Dep | undefined ) => {
254
+ if ( dep ) {
255
+ if ( __DEV__ ) {
256
+ dep . trigger ( {
257
+ target,
258
+ type,
259
+ key,
260
+ newValue,
261
+ oldValue,
262
+ oldTarget,
263
+ } )
264
+ } else {
265
+ dep . trigger ( )
266
+ }
267
+ }
268
+ }
269
+
270
+ startBatch ( )
271
+
254
272
if ( type === TriggerOpTypes . CLEAR ) {
255
273
// collection being cleared
256
274
// trigger all effects for target
257
- deps = [ ... depsMap . values ( ) ]
275
+ depsMap . forEach ( run )
258
276
} else {
259
277
const targetIsArray = isArray ( target )
260
278
const isArrayIndex = targetIsArray && isIntegerKey ( key )
@@ -267,67 +285,50 @@ export function trigger(
267
285
key === ARRAY_ITERATE_KEY ||
268
286
( ! isSymbol ( key ) && key >= newLength )
269
287
) {
270
- deps . push ( dep )
288
+ run ( dep )
271
289
}
272
290
} )
273
291
} else {
274
- const push = ( dep : Dep | undefined ) => dep && deps . push ( dep )
275
-
276
292
// schedule runs for SET | ADD | DELETE
277
293
if ( key !== void 0 ) {
278
- push ( depsMap . get ( key ) )
294
+ run ( depsMap . get ( key ) )
279
295
}
280
296
281
297
// schedule ARRAY_ITERATE for any numeric key change (length is handled above)
282
298
if ( isArrayIndex ) {
283
- push ( depsMap . get ( ARRAY_ITERATE_KEY ) )
299
+ run ( depsMap . get ( ARRAY_ITERATE_KEY ) )
284
300
}
285
301
286
302
// also run for iteration key on ADD | DELETE | Map.SET
287
303
switch ( type ) {
288
304
case TriggerOpTypes . ADD :
289
305
if ( ! targetIsArray ) {
290
- push ( depsMap . get ( ITERATE_KEY ) )
306
+ run ( depsMap . get ( ITERATE_KEY ) )
291
307
if ( isMap ( target ) ) {
292
- push ( depsMap . get ( MAP_KEY_ITERATE_KEY ) )
308
+ run ( depsMap . get ( MAP_KEY_ITERATE_KEY ) )
293
309
}
294
310
} else if ( isArrayIndex ) {
295
311
// new index added to array -> length changes
296
- push ( depsMap . get ( 'length' ) )
312
+ run ( depsMap . get ( 'length' ) )
297
313
}
298
314
break
299
315
case TriggerOpTypes . DELETE :
300
316
if ( ! targetIsArray ) {
301
- push ( depsMap . get ( ITERATE_KEY ) )
317
+ run ( depsMap . get ( ITERATE_KEY ) )
302
318
if ( isMap ( target ) ) {
303
- push ( depsMap . get ( MAP_KEY_ITERATE_KEY ) )
319
+ run ( depsMap . get ( MAP_KEY_ITERATE_KEY ) )
304
320
}
305
321
}
306
322
break
307
323
case TriggerOpTypes . SET :
308
324
if ( isMap ( target ) ) {
309
- push ( depsMap . get ( ITERATE_KEY ) )
325
+ run ( depsMap . get ( ITERATE_KEY ) )
310
326
}
311
327
break
312
328
}
313
329
}
314
330
}
315
331
316
- startBatch ( )
317
- for ( const dep of deps ) {
318
- if ( __DEV__ ) {
319
- dep . trigger ( {
320
- target,
321
- type,
322
- key,
323
- newValue,
324
- oldValue,
325
- oldTarget,
326
- } )
327
- } else {
328
- dep . trigger ( )
329
- }
330
- }
331
332
endBatch ( )
332
333
}
333
334
0 commit comments