Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/long-moles-join.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'svelte': patch
---

fix: ensure tracking returns true, even if in unowned
8 changes: 1 addition & 7 deletions packages/svelte/src/internal/client/reactivity/effects.js
Original file line number Diff line number Diff line change
Expand Up @@ -164,13 +164,7 @@ function create_effect(type, fn, sync, push = true) {
* @returns {boolean}
*/
export function effect_tracking() {
if (active_reaction === null || untracking) {
return false;
}

// If it's skipped, that's because we're inside an unowned
// that is not being tracked by another reaction
return !skip_reaction;
return active_reaction !== null && !untracking;
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { flushSync } from 'svelte';
import { test } from '../../test';

export default test({
async test({ assert, target, logs }) {
const b1 = target.querySelector('button');

b1?.click();
flushSync();

assert.htmlEqual(
target.innerHTML,
`<o>Store: new</o><p>Text: new message</p><button>Change Store</button>`
);
}
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<script>
import { writable, fromStore, toStore } from "svelte/store";

const store = writable("previous");
let text = $derived(fromStore(store).current + " message");

const textStore = toStore(() => text);
</script>

<o>Store: {$store}</o>
<p>Text: {text}</p>
<button onclick={() => { store.set("new"); }}>Change Store</button>