Skip to content

Commit 9439f1f

Browse files
committed
refactor(computed, effect): optimize dirty level handling
1 parent 9776a3b commit 9439f1f

File tree

2 files changed

+9
-11
lines changed

2 files changed

+9
-11
lines changed

src/computed.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,12 @@ export class Computed<T = any> implements IComputed {
2727
) { }
2828

2929
get(): T {
30-
const dirtyLevel = this.dirtyLevel;
30+
let dirtyLevel = this.dirtyLevel;
3131
if (dirtyLevel === DirtyLevels.MaybeDirty) {
3232
Subscriber.resolveMaybeDirty(this);
33-
if (this.dirtyLevel === DirtyLevels.Dirty) {
34-
this.update();
35-
}
36-
} else if (dirtyLevel === DirtyLevels.Dirty || dirtyLevel === DirtyLevels.Released) {
33+
dirtyLevel = this.dirtyLevel;
34+
}
35+
if (dirtyLevel >= DirtyLevels.Dirty) {
3736
this.update();
3837
}
3938
const activeTrackId = System.activeTrackId;

src/effect.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,16 @@ export class Effect<T = any> implements IEffect {
3838
}
3939

4040
notify() {
41-
const dirtyLevel = this.dirtyLevel;
42-
if (dirtyLevel === DirtyLevels.SideEffectsOnly) {
43-
this.dirtyLevel = DirtyLevels.None;
44-
Subscriber.runInnerEffects(this.deps);
45-
} else {
41+
let dirtyLevel = this.dirtyLevel;
42+
if (dirtyLevel > DirtyLevels.None) {
4643
if (dirtyLevel === DirtyLevels.MaybeDirty) {
4744
Subscriber.resolveMaybeDirty(this);
45+
dirtyLevel = this.dirtyLevel;
4846
}
49-
if (this.dirtyLevel === DirtyLevels.Dirty) {
47+
if (dirtyLevel === DirtyLevels.Dirty) {
5048
this.run();
5149
} else {
50+
this.dirtyLevel = DirtyLevels.None;
5251
Subscriber.runInnerEffects(this.deps);
5352
}
5453
}

0 commit comments

Comments
 (0)