Skip to content

Commit 6ec46b1

Browse files
committed
visitor
1 parent 235c793 commit 6ec46b1

File tree

2 files changed

+8
-32
lines changed

2 files changed

+8
-32
lines changed

packages/svelte/src/internal/client/runtime.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -419,10 +419,15 @@ function remove_reaction(signal, dependency) {
419419
export function remove_reactions(signal, start_index) {
420420
const dependencies = signal.deps;
421421
if (dependencies !== null) {
422-
const active_dependencies = start_index === 0 ? null : dependencies.slice(0, start_index);
422+
var active_dependencies = start_index === 0 ? null : dependencies.slice(0, start_index);
423+
var visited = new Set();
423424
let i;
424425
for (i = start_index; i < dependencies.length; i++) {
425426
const dependency = dependencies[i];
427+
if (visited.has(dependency)) {
428+
continue;
429+
}
430+
visited.add(dependency);
426431
// Avoid removing a reaction if we know that it is active (start_index will not be 0)
427432
if (active_dependencies === null || !active_dependencies.includes(dependency)) {
428433
remove_reaction(signal, dependency);
@@ -770,14 +775,11 @@ export function get(signal) {
770775
} else if (
771776
dependencies === null ||
772777
current_dependencies_index === 0 ||
773-
(dependencies[current_dependencies_index - 1] !== signal && !dependencies.includes(signal))
778+
dependencies[current_dependencies_index - 1] !== signal
774779
) {
775780
if (current_dependencies === null) {
776781
current_dependencies = [signal];
777-
} else if (
778-
current_dependencies[current_dependencies.length - 1] !== signal &&
779-
!current_dependencies.includes(signal)
780-
) {
782+
} else if (current_dependencies[current_dependencies.length - 1] !== signal) {
781783
current_dependencies.push(signal);
782784
}
783785
}

packages/svelte/tests/signals/test.ts

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -572,30 +572,4 @@ describe('signals', () => {
572572
assert.equal(d.deps?.length, 1);
573573
};
574574
});
575-
576-
test('reactions should not have duplicate dependencies', () => {
577-
let state = proxy({
578-
a: 1,
579-
b: 2
580-
});
581-
let count = source(0);
582-
583-
return () => {
584-
const effect = render_effect(() => {
585-
state.a;
586-
state.b;
587-
if ($.get(count) > 0) {
588-
state.a;
589-
state.b;
590-
}
591-
});
592-
593-
flushSync();
594-
assert.equal(effect?.deps?.length, 3);
595-
596-
set(count, 1);
597-
flushSync();
598-
assert.equal(effect?.deps?.length, 3);
599-
};
600-
});
601575
});

0 commit comments

Comments
 (0)