diff --git a/.changeset/lazy-rivers-connect.md b/.changeset/lazy-rivers-connect.md new file mode 100644 index 0000000000..c2486bdac7 --- /dev/null +++ b/.changeset/lazy-rivers-connect.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: avoid duplicate reaction when reconnecting a derived after its reader is hidden diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index d86c349445..6fe6feaae6 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -736,7 +736,10 @@ function reconnect(derived) { if (derived.deps === null) return; for (const dep of derived.deps) { - (dep.reactions ??= []).push(derived); + var reactions = (dep.reactions ??= []); + if (index_of.call(reactions, derived) === -1) { + reactions.push(derived); + } if ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) { unfreeze_derived_effects(/** @type {Derived} */ (dep));