fix: update indirectly-affected bindings on mutation
#16200WIP alternative to #16165. The real fix, I think, is to not use effects for synchronization at all, but rather to invalidate indirect bindings on mutation. In other words in a case like this...
<script>
export let selected;
export let tasks;
</script>
<select bind:value={selected}>
{#each tasks as task}
<option value='{task}'>{task.description}</option>
{/each}
</select>
<label>
<input type='checkbox' bind:checked={selected.done}> {selected.description}
</label>
<h2>Pending tasks</h2>
{#each tasks.filter(t => !t.done) as task}
<p>{task.description}</p>
{/each}
...updating selected
should also update tasks
, because the bindings are linked. I think we might be able to use this mechanism for each blocks as well and end up with simpler compiler code, though I don't have time to finish it right now and my brain needs a rest anyway because this stuff is confusing as hell. Can't wait to be able to delete all this legacy gubbins.
feat:
, fix:
, chore:
, or docs:
.packages/svelte/src
, add a changeset (npx changeset
).pnpm test
and lint the project with pnpm lint
Latest commit: 536df75
Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.
When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types
Click here to learn what changesets are, and how to add one.
Click here if you're a maintainer who wants to add a changeset to this PR
pnpm add https://pkg.pr.new/svelte@16200