From 9a719feb3e25c7c1ceb19904d794fcd643c6f15f Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Tue, 4 Mar 2025 18:34:20 +0000 Subject: [PATCH 1/2] chore: re-use current active effect for toStore if it already exists --- .changeset/tender-deers-hope.md | 5 +++++ packages/svelte/src/store/index-client.js | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 .changeset/tender-deers-hope.md diff --git a/.changeset/tender-deers-hope.md b/.changeset/tender-deers-hope.md new file mode 100644 index 000000000000..497b7caad7b6 --- /dev/null +++ b/.changeset/tender-deers-hope.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +chore: re-use current active effect for toStore if it already exists diff --git a/packages/svelte/src/store/index-client.js b/packages/svelte/src/store/index-client.js index ae6806ec763f..68bf6e5c97f7 100644 --- a/packages/svelte/src/store/index-client.js +++ b/packages/svelte/src/store/index-client.js @@ -6,6 +6,7 @@ import { } from '../internal/client/reactivity/effects.js'; import { get, writable } from './shared/index.js'; import { createSubscriber } from '../reactivity/create-subscriber.js'; +import { active_effect } from '../internal/client/runtime.js'; export { derived, get, readable, readonly, writable } from './shared/index.js'; @@ -46,12 +47,13 @@ export function toStore(get, set) { let ran = init_value !== get(); // TODO do we need a different implementation on the server? - const teardown = effect_root(() => { + var render = () => { render_effect(() => { const value = get(); if (ran) set(value); }); - }); + } + const teardown = active_effect === null ? effect_root(render) : render(); ran = true; From d950577e67fe4cfd7050c20cde55c6dfd6d7f8a6 Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Tue, 4 Mar 2025 18:40:58 +0000 Subject: [PATCH 2/2] chore: re-use current active effect for toStore if it already exists --- packages/svelte/src/store/index-client.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/svelte/src/store/index-client.js b/packages/svelte/src/store/index-client.js index 68bf6e5c97f7..f3fac717b223 100644 --- a/packages/svelte/src/store/index-client.js +++ b/packages/svelte/src/store/index-client.js @@ -52,7 +52,7 @@ export function toStore(get, set) { const value = get(); if (ran) set(value); }); - } + }; const teardown = active_effect === null ? effect_root(render) : render(); ran = true;