fix: each block losing reactivity when items removed while promise pending
#17151
Closing issue
Describe the bug
The rendered state doesn't update. Not sure what the exact issue is.
Reproduction
<script>
let value = $state("Apple");
const foo = $derived(await value);
const bar = $derived(foo === value && [0]);
</script>
<select bind:value>
<option value="Apple">Apple</option>
<option value="Banana">Banana</option>
</select>
{#each bar}
Selected fruit: {value}
{/each}
Logs
System Info
Svelte playground
Severity
annoyance
Pull request
Fixes #17074
When items are temporarily removed while async work is pending, the items can be added to skipped_effects but are not deleted later.
This is my first contribution so any feedback is appreciated and I'm happy to fix anything that needs changing.
Before submitting the PR, please make sure you do the following
- It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs
- Prefix your PR title with
feat:,fix:,chore:, ordocs:. - This message body should clearly illustrate what problems it solves.
- Ideally, include a test that fails without this PR but passes with it.
- If this PR changes code within
packages/svelte/src, add a changeset (npx changeset).
Tests and linting
- Run the tests with
pnpm testand lint the project withpnpm lint
Info
🦋 Changeset detected
Latest commit: 7a4ab8d
The changes in this PR will be included in the next version bump.
This PR includes changesets to release 1 package
| Name | Type |
|---|---|
| svelte | Patch |
Not sure what this means? Click here to learn what changesets are.
Click here if you're a maintainer who wants to add another changeset to this PR
pnpm add https://pkg.pr.new/svelte@17151thank you! as noted in #17150 (comment), this is also fixed by #17150, so I've merged the test in this PR into that one
Pro tip: You can prefix GitHub URLs of issues, PRs or discussions with svcl.dev/ to view them on this page! Also try it on a GitHub release ;)