diff --git a/packages/svelte/src/internal/client/dom/blocks/each.js b/packages/svelte/src/internal/client/dom/blocks/each.js index 063d251e16..d7c53a0248 100644 --- a/packages/svelte/src/internal/client/dom/blocks/each.js +++ b/packages/svelte/src/internal/client/dom/blocks/each.js @@ -269,6 +269,8 @@ export function each(node, flags, get_collection, get_key, render_fn, fallback_f } } else { if (active_fork !== null && should_defer_append()) { + var keys = new Set(); + for (i = 0; i < length; i += 1) { value = array[i]; key = get_key(value, i); @@ -297,6 +299,14 @@ export function each(node, flags, get_collection, get_key, render_fn, fallback_f offscreen_items.set(key, item); } + + keys.add(key); + } + + for (const [key, item] of state.items) { + if (!keys.has(key)) { + active_fork.skipped_effects.add(item.e); + } } active_fork?.add_callback(commit);