diff --git a/.changeset/unlucky-baboons-greet.md b/.changeset/unlucky-baboons-greet.md new file mode 100644 index 0000000000..7d808f2734 --- /dev/null +++ b/.changeset/unlucky-baboons-greet.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: improve reconcilation of inert each block rows diff --git a/packages/svelte/src/internal/client/dom/blocks/each.js b/packages/svelte/src/internal/client/dom/blocks/each.js index 5753c7cb02..d09d2dac5c 100644 --- a/packages/svelte/src/internal/client/dom/blocks/each.js +++ b/packages/svelte/src/internal/client/dom/blocks/each.js @@ -373,7 +373,11 @@ function reconcile(array, state, anchor, render_fn, flags, get_key) { stashed = []; while (current !== null && current.k !== key) { - (seen ??= new Set()).add(current); + // If the item has an effect that is already inert, skip over adding it + // to our seen Set as the item is already being handled + if ((current.e.f & INERT) === 0) { + (seen ??= new Set()).add(current); + } stashed.push(current); current = current.next; }