pull/16684/merge
Hari 4 days ago committed by GitHub
commit a845d55583
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,5 @@
---
'svelte': patch
---
fix: fixed component lifecycle timing issue in #key blocks. its now properly cleaned up before new instance are created.

@ -25,7 +25,7 @@ export function key(node, get_key, render_fn) {
/** @type {V | typeof UNINITIALIZED} */
var key = UNINITIALIZED;
/** @type {Effect} */
/** @type {Effect | null} */
var effect;
/** @type {Effect} */
@ -37,10 +37,6 @@ export function key(node, get_key, render_fn) {
var changed = is_runes() ? not_equal : safe_not_equal;
function commit() {
if (effect) {
pause_effect(effect);
}
if (offscreen_fragment !== null) {
// remove the anchor
/** @type {Text} */ (offscreen_fragment.lastChild).remove();
@ -54,6 +50,12 @@ export function key(node, get_key, render_fn) {
block(() => {
if (changed(key, (key = get_key()))) {
// Pause and cleanup the old effect before creating a new one
// This ensures proper component lifecycle ordering (destroy -> create -> mount)
if (effect) {
pause_effect(effect);
effect = null;
}
var target = anchor;
var defer = should_defer_append();
@ -63,6 +65,7 @@ export function key(node, get_key, render_fn) {
offscreen_fragment.append((target = create_text()));
}
// Create the new effect with the component
pending_effect = branch(() => render_fn(target));
if (defer) {

Loading…
Cancel
Save