Skip to content

Replace target instead of appending to it #6

@jimafisk

Description

@jimafisk

When Svelte hydrates, it appends a child component to its parent. In other words, it nests the new component inside the existing component.

How it currently works

So if you have a component like this:

<div>My component</div>

...and a page like this:

<body>
  <main id='target'>
    <p>some content</p>
  <main>
</body>

...the result after mounting would be:

<body>
  <main id='target'>
    <p>some content</p>
    <div>My component</div>
  <main>
</body>

I believe it puts the new component after existing children elements.

There have been several discussions about replacing the parent element instead of appending to it:

Some of the worry around replacing elements is that it's expensive and destructive to other child elements that potentially exist already in the dom:

Destroying existing child element

So if you have a component like this:

<div>My component</div>

...and a page like this:

<body>
  <main id='target'>
    <p>some content we want to get rid of</p>
  <main>
</body>

...the result after mounting would be:

<body>
  <div>My component</div>
</body>

You could potentially check that the elements that are being replaced are the same as the hydrated elements, but that could be a lot of work and potentially slow down performance. For Plenti we're just creating HTML fallbacks that should exactly mirror the hydrated components at their initial state, so it shouldn't be destructive in any way.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions