Skip to content

Commit 0ace243

Browse files
committed
fix
1 parent 6025193 commit 0ace243

File tree

1 file changed

+32
-21
lines changed
  • packages/svelte/src/internal/client/dom/blocks

1 file changed

+32
-21
lines changed

packages/svelte/src/internal/client/dom/blocks/each.js

Lines changed: 32 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,8 @@ export function each(node, flags, get_collection, get_key, render_fn, fallback_f
293293
i,
294294
render_fn,
295295
flags,
296-
get_collection
296+
get_collection,
297+
true
297298
);
298299

299300
pending_items.set(key, item);
@@ -406,28 +407,34 @@ function reconcile(
406407

407408
if (item === undefined) {
408409
var pending = pending_items.get(key);
410+
409411
if (pending !== undefined) {
410412
pending_items.delete(key);
411413
items.set(key, pending);
412-
item = pending;
413-
}
414-
}
415414

416-
if (item === undefined) {
417-
var child_anchor = current ? /** @type {TemplateNode} */ (current.e.nodes_start) : anchor;
418-
419-
prev = create_item(
420-
child_anchor,
421-
state,
422-
prev,
423-
prev === null ? state.first : prev.next,
424-
value,
425-
key,
426-
i,
427-
render_fn,
428-
flags,
429-
get_collection
430-
);
415+
var next = prev && prev.next;
416+
417+
link(state, prev, pending);
418+
link(state, pending, next);
419+
420+
move(pending, next, anchor);
421+
prev = pending;
422+
} else {
423+
var child_anchor = current ? /** @type {TemplateNode} */ (current.e.nodes_start) : anchor;
424+
425+
prev = create_item(
426+
child_anchor,
427+
state,
428+
prev,
429+
prev === null ? state.first : prev.next,
430+
value,
431+
key,
432+
i,
433+
render_fn,
434+
flags,
435+
get_collection
436+
);
437+
}
431438

432439
items.set(key, prev);
433440

@@ -604,6 +611,7 @@ function update_item(item, value, index, type) {
604611
* @param {(anchor: Node, item: V | Source<V>, index: number | Value<number>, collection: () => V[]) => void} render_fn
605612
* @param {number} flags
606613
* @param {() => V[]} get_collection
614+
* @param {boolean} [deferred]
607615
* @returns {EachItem}
608616
*/
609617
function create_item(
@@ -616,7 +624,8 @@ function create_item(
616624
index,
617625
render_fn,
618626
flags,
619-
get_collection
627+
get_collection,
628+
deferred
620629
) {
621630
var previous_each_item = current_each_item;
622631
var reactive = (flags & EACH_ITEM_REACTIVE) !== 0;
@@ -661,7 +670,9 @@ function create_item(
661670
item.e.next = next && next.e;
662671

663672
if (prev === null) {
664-
state.first = item;
673+
if (!deferred) {
674+
state.first = item;
675+
}
665676
} else {
666677
prev.next = item;
667678
prev.e.next = item.e;

0 commit comments

Comments
 (0)