partial fix

aa-coordination
Rich Harris 7 months ago
parent 012cdebed6
commit 6025193b98

@ -93,8 +93,8 @@ export function boundary(node, props, children) {
var hydrate_open = hydrate_node; var hydrate_open = hydrate_node;
var is_creating_fallback = false; var is_creating_fallback = false;
/** @type {Array<() => void>} */ /** @type {Set<() => void>} */
var callbacks = []; var callbacks = new Set();
/** @type {Effect[]} */ /** @type {Effect[]} */
var render_effects = []; var render_effects = [];
@ -155,8 +155,8 @@ export function boundary(node, props, children) {
} }
} }
run_all(callbacks); for (const fn of callbacks) fn();
callbacks.length = 0; callbacks.clear();
if (pending_effect) { if (pending_effect) {
pause_effect(pending_effect, () => { pause_effect(pending_effect, () => {
@ -205,7 +205,7 @@ export function boundary(node, props, children) {
} }
if (input === ADD_CALLBACK) { if (input === ADD_CALLBACK) {
callbacks.push(payload); callbacks.add(payload);
return; return;
} }

@ -401,7 +401,17 @@ function reconcile(
for (i = 0; i < length; i += 1) { for (i = 0; i < length; i += 1) {
value = array[i]; value = array[i];
key = get_key(value, i); key = get_key(value, i);
item = items.get(key) ?? pending_items.get(key);
item = items.get(key);
if (item === undefined) {
var pending = pending_items.get(key);
if (pending !== undefined) {
pending_items.delete(key);
items.set(key, pending);
item = pending;
}
}
if (item === undefined) { if (item === undefined) {
var child_anchor = current ? /** @type {TemplateNode} */ (current.e.nodes_start) : anchor; var child_anchor = current ? /** @type {TemplateNode} */ (current.e.nodes_start) : anchor;
@ -550,12 +560,17 @@ function reconcile(
} }
// TODO this seems super weird... should be `each_effect`, but that doesn't seem to work? // TODO this seems super weird... should be `each_effect`, but that doesn't seem to work?
if (active_effect !== null) { // if (active_effect !== null) {
active_effect.first = state.first && state.first.e; // active_effect.first = state.first && state.first.e;
active_effect.last = prev && prev.e; // active_effect.last = prev && prev.e;
} // }
pending_items.clear(); each_effect.first = state.first && state.first.e;
each_effect.last = prev && prev.e;
for (var unused of pending_items.values()) {
destroy_effect(unused.e);
}
} }
/** /**

Loading…
Cancel
Save