From f5d4350f3d60606c556e195a80f21427a4b6738c Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 18 Aug 2025 08:52:44 -0400 Subject: [PATCH] Revert "fix: do not defer unmount; immediately unmount components (#16624)" (#16639) This reverts commit 95e51755814329d596ced98fb1829d0f797e503d. --- .changeset/few-geese-itch.md | 5 ----- .../internal/client/dom/blocks/svelte-component.js | 10 +++++----- .../dynamic-component-destroy-then-create/A.svelte | 8 -------- .../dynamic-component-destroy-then-create/B.svelte | 8 -------- .../_config.js | 13 ------------- .../main.svelte | 13 ------------- 6 files changed, 5 insertions(+), 52 deletions(-) delete mode 100644 .changeset/few-geese-itch.md delete mode 100644 packages/svelte/tests/runtime-runes/samples/dynamic-component-destroy-then-create/A.svelte delete mode 100644 packages/svelte/tests/runtime-runes/samples/dynamic-component-destroy-then-create/B.svelte delete mode 100644 packages/svelte/tests/runtime-runes/samples/dynamic-component-destroy-then-create/_config.js delete mode 100644 packages/svelte/tests/runtime-runes/samples/dynamic-component-destroy-then-create/main.svelte diff --git a/.changeset/few-geese-itch.md b/.changeset/few-geese-itch.md deleted file mode 100644 index 737aa01911..0000000000 --- a/.changeset/few-geese-itch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: destroy dynamic component instance before creating new one diff --git a/packages/svelte/src/internal/client/dom/blocks/svelte-component.js b/packages/svelte/src/internal/client/dom/blocks/svelte-component.js index be6611c96d..2697722b39 100644 --- a/packages/svelte/src/internal/client/dom/blocks/svelte-component.js +++ b/packages/svelte/src/internal/client/dom/blocks/svelte-component.js @@ -34,6 +34,11 @@ export function component(node, get_component, render_fn) { var pending_effect = null; function commit() { + if (effect) { + pause_effect(effect); + effect = null; + } + if (offscreen_fragment) { // remove the anchor /** @type {Text} */ (offscreen_fragment.lastChild).remove(); @@ -51,11 +56,6 @@ export function component(node, get_component, render_fn) { var defer = should_defer_append(); - if (effect) { - pause_effect(effect); - effect = null; - } - if (component) { var target = anchor; diff --git a/packages/svelte/tests/runtime-runes/samples/dynamic-component-destroy-then-create/A.svelte b/packages/svelte/tests/runtime-runes/samples/dynamic-component-destroy-then-create/A.svelte deleted file mode 100644 index e73551cc28..0000000000 --- a/packages/svelte/tests/runtime-runes/samples/dynamic-component-destroy-then-create/A.svelte +++ /dev/null @@ -1,8 +0,0 @@ - - -

A

diff --git a/packages/svelte/tests/runtime-runes/samples/dynamic-component-destroy-then-create/B.svelte b/packages/svelte/tests/runtime-runes/samples/dynamic-component-destroy-then-create/B.svelte deleted file mode 100644 index 459aa313c4..0000000000 --- a/packages/svelte/tests/runtime-runes/samples/dynamic-component-destroy-then-create/B.svelte +++ /dev/null @@ -1,8 +0,0 @@ - - -

B

diff --git a/packages/svelte/tests/runtime-runes/samples/dynamic-component-destroy-then-create/_config.js b/packages/svelte/tests/runtime-runes/samples/dynamic-component-destroy-then-create/_config.js deleted file mode 100644 index e750c48a00..0000000000 --- a/packages/svelte/tests/runtime-runes/samples/dynamic-component-destroy-then-create/_config.js +++ /dev/null @@ -1,13 +0,0 @@ -import { test } from '../../test'; -import { flushSync } from 'svelte'; - -export default test({ - mode: ['client', 'hydrate'], - - async test({ assert, target, logs }) { - const [button] = target.querySelectorAll('button'); - - flushSync(() => button.click()); - assert.deepEqual(logs, ['create A', 'destroy A', 'create B']); - } -}); diff --git a/packages/svelte/tests/runtime-runes/samples/dynamic-component-destroy-then-create/main.svelte b/packages/svelte/tests/runtime-runes/samples/dynamic-component-destroy-then-create/main.svelte deleted file mode 100644 index c9ef5430a4..0000000000 --- a/packages/svelte/tests/runtime-runes/samples/dynamic-component-destroy-then-create/main.svelte +++ /dev/null @@ -1,13 +0,0 @@ - - - - -