Skip to content

Commit

Permalink
fix: ensure tracking returns true, even if in unowned (#15214)
Browse files Browse the repository at this point in the history
* fix: ensure tracking returns true, even if in unowned

* fix: ensure tracking returns true, even if in unowned

* Update packages/svelte/tests/runtime-runes/samples/effect-tracking-unowned/main.svelte

---------

Co-authored-by: Simon H <[email protected]>
  • Loading branch information
trueadm and dummdidumm authored Feb 5, 2025
1 parent f67cf20 commit d39d8c0
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 7 deletions.
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");
text; // read derived in a non-tracking context
</script>

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

0 comments on commit d39d8c0

Please sign in to comment.