Skip to content

Commit 5406e1a

Browse files
milomgthePunderWoman
authored andcommitted
refactor(core): use version>0 instead of hasRun (angular#62467)
this saves a field for effect and watch nodes PR Close angular#62467
1 parent 3bd91de commit 5406e1a

File tree

3 files changed

+4
-10
lines changed

3 files changed

+4
-10
lines changed

goldens/public-api/core/primitives/signals/index.api.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ export interface BaseEffectNode extends ReactiveNode {
1616
// (undocumented)
1717
fn: () => void;
1818
// (undocumented)
19-
hasRun: boolean;
20-
// (undocumented)
2119
run(): void;
2220
}
2321

packages/core/primitives/signals/src/effect.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ export type EffectCleanupFn = () => void;
2727
export type EffectCleanupRegisterFn = (cleanupFn: EffectCleanupFn) => void;
2828

2929
export interface BaseEffectNode extends ReactiveNode {
30-
hasRun: boolean;
3130
fn: () => void;
3231
destroy(): void;
3332
cleanup(): void;
@@ -40,16 +39,15 @@ export const BASE_EFFECT_NODE: Omit<BaseEffectNode, 'fn' | 'destroy' | 'cleanup'
4039
consumerIsAlwaysLive: true,
4140
consumerAllowSignalWrites: true,
4241
dirty: true,
43-
hasRun: false,
4442
kind: 'effect',
4543
}))();
4644

4745
export function runEffect(node: BaseEffectNode) {
4846
node.dirty = false;
49-
if (node.hasRun && !consumerPollProducersForChange(node)) {
47+
if (node.version > 0 && !consumerPollProducersForChange(node)) {
5048
return;
5149
}
52-
node.hasRun = true;
50+
node.version++;
5351
const prevNode = consumerBeforeComputation(node);
5452
try {
5553
node.cleanup();

packages/core/primitives/signals/src/watch.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ export interface Watch {
5656
[SIGNAL]: WatchNode;
5757
}
5858
export interface WatchNode extends ReactiveNode {
59-
hasRun: boolean;
6059
fn: ((onCleanup: WatchCleanupRegisterFn) => void) | null;
6160
schedule: ((watch: Watch) => void) | null;
6261
cleanupFn: WatchCleanupFn;
@@ -111,10 +110,10 @@ export function createWatch(
111110
}
112111

113112
node.dirty = false;
114-
if (node.hasRun && !consumerPollProducersForChange(node)) {
113+
if (node.version > 0 && !consumerPollProducersForChange(node)) {
115114
return;
116115
}
117-
node.hasRun = true;
116+
node.version++;
118117

119118
const prevConsumer = consumerBeforeComputation(node);
120119
try {
@@ -152,7 +151,6 @@ const WATCH_NODE: Partial<WatchNode> = /* @__PURE__ */ (() => {
152151
node.schedule(node.ref);
153152
}
154153
},
155-
hasRun: false,
156154
cleanupFn: NOOP_CLEANUP_FN,
157155
};
158156
})();

0 commit comments

Comments
 (0)