diff --git a/.changeset/silver-mice-double.md b/.changeset/silver-mice-double.md new file mode 100644 index 000000000000..58e54286f2a7 --- /dev/null +++ b/.changeset/silver-mice-double.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: properly update store values diff --git a/packages/svelte/src/internal/client/reactivity/store.js b/packages/svelte/src/internal/client/reactivity/store.js index 46e57b0fd072..0f491fdacafd 100644 --- a/packages/svelte/src/internal/client/reactivity/store.js +++ b/packages/svelte/src/internal/client/reactivity/store.js @@ -28,7 +28,7 @@ export function store_get(store, store_name, stores) { entry.store = store ?? null; if (store == null) { - set(entry.source, undefined); + entry.source.v = undefined; // see synchronous callback comment below entry.unsubscribe = noop; } else { var is_synchronous_callback = true; diff --git a/packages/svelte/tests/runtime-runes/samples/store-no-mutation-validation/main.svelte b/packages/svelte/tests/runtime-runes/samples/store-no-mutation-validation/main.svelte index 36eb1875e099..5e13763ef766 100644 --- a/packages/svelte/tests/runtime-runes/samples/store-no-mutation-validation/main.svelte +++ b/packages/svelte/tests/runtime-runes/samples/store-no-mutation-validation/main.svelte @@ -9,10 +9,12 @@ return () => {}; } }; + let store3 = undefined; // store signal is updated during reading this, which normally errors, but shouldn't for stores let name = $derived($store1); let hello = $derived($store2); + let undefined_value = $derived($store3); -

{hello} {name}

+

{hello} {name} {undefined_value}