diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js index 9c623f90c4..e4c5c115f5 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js @@ -2189,8 +2189,11 @@ export const template_visitors = { { ...context, state: child_state } ); - // TODO only do this when necessary - child_state.init.push(b.stmt(b.call('$.reset', context.state.node))); + // If `hydrate_node` is set inside the element, we need to reset it + // after the element has been hydrated + if (trimmed.some((node) => node.type !== 'Text')) { + child_state.init.push(b.stmt(b.call('$.reset', context.state.node))); + } if (has_declaration) { context.state.init.push( diff --git a/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/client/main.svelte.js b/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/client/main.svelte.js index 3754e08c09..aa4d22d99a 100644 --- a/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/client/main.svelte.js +++ b/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/client/main.svelte.js @@ -9,31 +9,19 @@ export default function Main($$anchor) { let y = () => 'test'; var fragment = root(); var div = $.first_child(fragment); - - $.reset(div); - var svg = $.sibling($.sibling(div, true)); - - $.reset(svg); - var custom_element = $.sibling($.sibling(svg, true)); - - $.reset(custom_element); - var div_1 = $.sibling($.sibling(custom_element, true)); $.template_effect(() => $.set_attribute(div_1, "foobar", y())); - $.reset(div_1); var svg_1 = $.sibling($.sibling(div_1, true)); $.template_effect(() => $.set_attribute(svg_1, "viewBox", y())); - $.reset(svg_1); var custom_element_1 = $.sibling($.sibling(svg_1, true)); $.template_effect(() => $.set_custom_element_data(custom_element_1, "fooBar", y())); - $.reset(custom_element_1); $.template_effect(() => { $.set_attribute(div, "foobar", x); diff --git a/packages/svelte/tests/snapshot/samples/hello-world/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/hello-world/_expected/client/index.svelte.js index a92490f4a8..92354d8f14 100644 --- a/packages/svelte/tests/snapshot/samples/hello-world/_expected/client/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/hello-world/_expected/client/index.svelte.js @@ -6,6 +6,5 @@ var root = $.template(`

hello world

`); export default function Hello_world($$anchor) { var h1 = root(); - $.reset(h1); $.append($$anchor, h1); } \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/hmr/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/hmr/_expected/client/index.svelte.js index f7b8fb07c4..6cb6845c1c 100644 --- a/packages/svelte/tests/snapshot/samples/hmr/_expected/client/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/hmr/_expected/client/index.svelte.js @@ -6,7 +6,6 @@ var root = $.template(`

hello world

`); function Hmr($$anchor) { var h1 = root(); - $.reset(h1); $.append($$anchor, h1); } diff --git a/packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/client/index.svelte.js index 1546210cf6..0f2d6f4200 100644 --- a/packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/client/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/client/index.svelte.js @@ -17,17 +17,14 @@ export default function State_proxy_literal($$anchor) { var input = $.first_child(fragment); $.remove_input_defaults(input); - $.reset(input); var input_1 = $.sibling($.sibling(input, true)); $.remove_input_defaults(input_1); - $.reset(input_1); var button = $.sibling($.sibling(input_1, true)); button.__click = [reset, str, tpl]; - $.reset(button); $.bind_value(input, () => $.get(str), ($$value) => $.set(str, $$value)); $.bind_value(input_1, () => $.get(tpl), ($$value) => $.set(tpl, $$value)); $.append($$anchor, fragment);