@@ -250,11 +250,29 @@ export function trigger(
250250 return
251251 }
252252
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+
254272 if ( type === TriggerOpTypes . CLEAR ) {
255273 // collection being cleared
256274 // trigger all effects for target
257- deps = [ ... depsMap . values ( ) ]
275+ depsMap . forEach ( run )
258276 } else {
259277 const targetIsArray = isArray ( target )
260278 const isArrayIndex = targetIsArray && isIntegerKey ( key )
@@ -267,67 +285,50 @@ export function trigger(
267285 key === ARRAY_ITERATE_KEY ||
268286 ( ! isSymbol ( key ) && key >= newLength )
269287 ) {
270- deps . push ( dep )
288+ run ( dep )
271289 }
272290 } )
273291 } else {
274- const push = ( dep : Dep | undefined ) => dep && deps . push ( dep )
275-
276292 // schedule runs for SET | ADD | DELETE
277293 if ( key !== void 0 ) {
278- push ( depsMap . get ( key ) )
294+ run ( depsMap . get ( key ) )
279295 }
280296
281297 // schedule ARRAY_ITERATE for any numeric key change (length is handled above)
282298 if ( isArrayIndex ) {
283- push ( depsMap . get ( ARRAY_ITERATE_KEY ) )
299+ run ( depsMap . get ( ARRAY_ITERATE_KEY ) )
284300 }
285301
286302 // also run for iteration key on ADD | DELETE | Map.SET
287303 switch ( type ) {
288304 case TriggerOpTypes . ADD :
289305 if ( ! targetIsArray ) {
290- push ( depsMap . get ( ITERATE_KEY ) )
306+ run ( depsMap . get ( ITERATE_KEY ) )
291307 if ( isMap ( target ) ) {
292- push ( depsMap . get ( MAP_KEY_ITERATE_KEY ) )
308+ run ( depsMap . get ( MAP_KEY_ITERATE_KEY ) )
293309 }
294310 } else if ( isArrayIndex ) {
295311 // new index added to array -> length changes
296- push ( depsMap . get ( 'length' ) )
312+ run ( depsMap . get ( 'length' ) )
297313 }
298314 break
299315 case TriggerOpTypes . DELETE :
300316 if ( ! targetIsArray ) {
301- push ( depsMap . get ( ITERATE_KEY ) )
317+ run ( depsMap . get ( ITERATE_KEY ) )
302318 if ( isMap ( target ) ) {
303- push ( depsMap . get ( MAP_KEY_ITERATE_KEY ) )
319+ run ( depsMap . get ( MAP_KEY_ITERATE_KEY ) )
304320 }
305321 }
306322 break
307323 case TriggerOpTypes . SET :
308324 if ( isMap ( target ) ) {
309- push ( depsMap . get ( ITERATE_KEY ) )
325+ run ( depsMap . get ( ITERATE_KEY ) )
310326 }
311327 break
312328 }
313329 }
314330 }
315331
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- }
331332 endBatch ( )
332333}
333334
0 commit comments