Skip to content

Turbolinks: clean up injected scripts and styles on page navigation#3283

Merged
tony-sull merged 3 commits into
mainfrom
fix/turbolinks-hydration
May 3, 2022
Merged

Turbolinks: clean up injected scripts and styles on page navigation#3283
tony-sull merged 3 commits into
mainfrom
fix/turbolinks-hydration

Conversation

@tony-sull

@tony-sull tony-sull commented May 3, 2022

Copy link
Copy Markdown
Contributor

Changes

Closes #3128

This updates the turbolinks integration to remove any client hydration scripts before page navigation.

By default turbolinks will leave <head> scripts in place during page navigation, by manually removing them we leave it up to turbolinks to add them back if needed, triggering a fresh script execution in the browser and re-hydrating the components again 🥳

styles

Injected style bundles are also cleaned up on navigation now - after each page navigation they're moved down into the body where Turbolinks will clean them up when diffing the new page

Testing

Tested locally with the reproduction from #3128

Docs

None, bugfix only

Note

Why two different methods for cleaning up scripts vs styles? Because it actually works...🤣 If scripts are moved into the body after page navigation it breaks the hydration process. If styles are removed from the head they're never actually replaced with the new page's link (not sure why, some quirk in Turbolinks diffing 🤷)

@changeset-bot

changeset-bot Bot commented May 3, 2022

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: d56eb4e

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@astrojs/turbolinks Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions github-actions Bot added the pkg: integration Related to any renderer integration (scope) label May 3, 2022
@tony-sull tony-sull changed the title Fixes Fixes component hydration when navigating back to a page with the Turbolinks integration May 3, 2022

@bholmesdev bholmesdev left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ahhh so smart! I'm rendered speechless 👏

@bholmesdev

Copy link
Copy Markdown
Contributor

Hm, give this a rebase for that failing test. Not sure how these are related...

@FredKSchott FredKSchott left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

simple and clever :)

@tony-sull tony-sull changed the title Fixes component hydration when navigating back to a page with the Turbolinks integration Turbolinks: clean up injected scripts and styles on page navigation May 3, 2022
@tony-sull tony-sull merged commit 9ad8aef into main May 3, 2022
@tony-sull tony-sull deleted the fix/turbolinks-hydration branch May 3, 2022 22:30
@github-actions github-actions Bot mentioned this pull request May 3, 2022
nonphoto pushed a commit to nonphoto/astro that referenced this pull request May 6, 2022
…ithastro#3283)

* client hydration scripts should be removed before navigation

* chore: adding a changeset

* also cleanup injected styles on page navigation
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pkg: integration Related to any renderer integration (scope)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

🐛 BUG: Turbolinks breaks hydration on repeat page views

3 participants