@@ -60,7 +60,7 @@ export class ReactiveEffect<T = any> {
6060 /**
6161 * @internal
6262 */
63- _queryings = 0
63+ _shouldSchedule = false
6464 /**
6565 * @internal
6666 */
@@ -76,22 +76,23 @@ export class ReactiveEffect<T = any> {
7676 }
7777
7878 public get dirty ( ) {
79- if ( this . _dirtyLevel === DirtyLevels . ComputedValueMaybeDirty ) {
80- this . _dirtyLevel = DirtyLevels . NotDirty
81- this . _queryings ++
79+ if ( this . _dirtyLevel === DirtyLevels . MaybeDirty ) {
8280 pauseTracking ( )
83- for ( const dep of this . deps ) {
81+ for ( let i = 0 ; i < this . _depsLength ; i ++ ) {
82+ const dep = this . deps [ i ]
8483 if ( dep . computed ) {
8584 triggerComputed ( dep . computed )
86- if ( this . _dirtyLevel >= DirtyLevels . ComputedValueDirty ) {
85+ if ( this . _dirtyLevel >= DirtyLevels . Dirty ) {
8786 break
8887 }
8988 }
9089 }
90+ if ( this . _dirtyLevel < DirtyLevels . Dirty ) {
91+ this . _dirtyLevel = DirtyLevels . NotDirty
92+ }
9193 resetTracking ( )
92- this . _queryings --
9394 }
94- return this . _dirtyLevel >= DirtyLevels . ComputedValueDirty
95+ return this . _dirtyLevel >= DirtyLevels . Dirty
9596 }
9697
9798 public set dirty ( v ) {
@@ -290,28 +291,29 @@ export function triggerEffects(
290291) {
291292 pauseScheduling ( )
292293 for ( const effect of dep . keys ( ) ) {
293- if ( ! effect . allowRecurse && effect . _runnings ) {
294+ if ( dep . get ( effect ) !== effect . _trackId ) {
295+ // when recurse effect is running, dep map could have outdated items
294296 continue
295297 }
296- if (
297- effect . _dirtyLevel < dirtyLevel &&
298- ( ! effect . _runnings || dirtyLevel !== DirtyLevels . ComputedValueDirty )
299- ) {
298+ if ( effect . _dirtyLevel < dirtyLevel ) {
300299 const lastDirtyLevel = effect . _dirtyLevel
301300 effect . _dirtyLevel = dirtyLevel
302- if (
303- lastDirtyLevel === DirtyLevels . NotDirty &&
304- ( ! effect . _queryings || dirtyLevel !== DirtyLevels . ComputedValueDirty )
305- ) {
301+ if ( lastDirtyLevel === DirtyLevels . NotDirty ) {
302+ effect . _shouldSchedule = true
306303 if ( __DEV__ ) {
307304 effect . onTrigger ?.( extend ( { effect } , debuggerEventExtraInfo ) )
308305 }
309306 effect . trigger ( )
310- if ( effect . scheduler ) {
311- queueEffectSchedulers . push ( effect . scheduler )
312- }
313307 }
314308 }
309+ if (
310+ effect . scheduler &&
311+ effect . _shouldSchedule &&
312+ ( ! effect . _runnings || effect . allowRecurse )
313+ ) {
314+ effect . _shouldSchedule = false
315+ queueEffectSchedulers . push ( effect . scheduler )
316+ }
315317 }
316318 resetScheduling ( )
317319}
0 commit comments