fix: ensure tracking returns true, even if in unowned (#15214)

* 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 <5968653+dummdidumm@users.noreply.github.com>
pull/15221/head
Dominic Gannaway 7 months ago committed by GitHub
parent f67cf201af
commit d39d8c0675
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,5 @@
---
'svelte': patch
---
fix: ensure tracking returns true, even if in unowned

@ -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;
}
/**

@ -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>`
);
}
});

@ -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>
Loading…
Cancel
Save