fix: don't log `await_reactivity_loss` warning when signal is read in `untrack` (#16385)

* fix: don't log `await_reactivity_loss` warning when signal is read in `untrack`

* add test

* fix
pull/16390/head
ComputerGuy 2 months ago committed by GitHub
parent e01bd97bef
commit 8e73fd4b03
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,5 @@
---
'svelte': patch
---
fix: don't log `await_reactivity_loss` warning when signal is read in `untrack`

@ -609,7 +609,7 @@ export function get(signal) {
var tracking = (current_async_effect.f & REACTION_IS_UPDATING) !== 0;
var was_read = current_async_effect.deps?.includes(signal);
if (!tracking && !was_read) {
if (!tracking && !untracking && !was_read) {
w.await_reactivity_loss(/** @type {string} */ (signal.label));
var trace = get_stack('TracedAt');

@ -6,11 +6,14 @@ export default test({
dev: true
},
html: `<button>a</button><button>b</button><p>pending</p>`,
html: `<button>a</button><button>b</button><button>c</button><p>pending</p>`,
async test({ assert, target, warnings }) {
await tick();
assert.htmlEqual(target.innerHTML, '<button>a</button><button>b</button><h1>3</h1><p>3</p>');
assert.htmlEqual(
target.innerHTML,
'<button>a</button><button>b</button><button>c</button><h1>6</h1><p>6</p>'
);
assert.equal(
warnings[0],

@ -1,18 +1,21 @@
<script>
import { untrack } from 'svelte';
let a = $state(1);
let b = $state(2);
let c = $state(3);
async function a_plus_b() {
return await a + await b;
async function a_plus_b_plus_c() {
return await a + await b + await untrack(() => c);
}
</script>
<button onclick={() => a++}>a</button>
<button onclick={() => b++}>b</button>
<button onclick={() => c++}>c</button>
<svelte:boundary>
<h1>{await a_plus_b()}</h1>
<p>{await a + await b}</p>
<h1>{await a_plus_b_plus_c()}</h1>
<p>{await a + await b + await c}</p>
{#snippet pending()}
<p>pending</p>

Loading…
Cancel
Save