Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
merged 3 commits into from
May 3, 2022

Conversation

tony-sull
Copy link
Contributor

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

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
Copy link

changeset-bot bot commented May 3, 2022

🦋 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
Copy link
Contributor

@bholmesdev bholmesdev left a comment

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
Contributor

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

Copy link
Member

@FredKSchott FredKSchott left a comment

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