diff options
author | 2023-08-29 09:30:11 -0500 | |
---|---|---|
committer | 2023-08-29 09:30:11 -0500 | |
commit | 1f58a7a1bea6888868b689dac94801d554319b02 (patch) | |
tree | d211fa64f18e32ca0798e1ca93b96c2477eea322 /packages/integrations/react/client.js | |
parent | 9e021a91c57d10809f588dd47968fc0e7f8b4d5c (diff) | |
download | astro-1f58a7a1bea6888868b689dac94801d554319b02.tar.gz astro-1f58a7a1bea6888868b689dac94801d554319b02.tar.zst astro-1f58a7a1bea6888868b689dac94801d554319b02.zip |
Unmount framework components when islands are destroyed (#8264)
* fix(view-transitions): update persistence logic for improved unmount behavior
* feat(astro): add `astro:unmount` event
* feat(vue): automatically unmount islands
* feat(react): automatically unmount islands
* feat(react): automatically unmount islands
* feat(solid): automatically dispose of islands
* feat(svelte): automatically destroy of islands
* feat(svelte): automatically destroy of islands
* feat(solid): automatically dispose of islands
* feat(preact): automatically unmount islands
* chore: update changeset
* fix: rebase issue
* chore: add clarifying comment
* chore: remove duplicate changeset
* chore: add changeset
Diffstat (limited to 'packages/integrations/react/client.js')
-rw-r--r-- | packages/integrations/react/client.js | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/packages/integrations/react/client.js b/packages/integrations/react/client.js index d8948e7bb..dbd32c0c5 100644 --- a/packages/integrations/react/client.js +++ b/packages/integrations/react/client.js @@ -31,10 +31,14 @@ export default (element) => } if (client === 'only') { return startTransition(() => { - createRoot(element).render(componentEl); + const root = createRoot(element); + root.render(componentEl); + element.addEventListener('astro:unmount', () => root.unmount(), { once: true }); }); } - return startTransition(() => { - hydrateRoot(element, componentEl, renderOptions); + startTransition(() => { + const root = hydrateRoot(element, componentEl, renderOptions); + root.render(componentEl); + element.addEventListener('astro:unmount', () => root.unmount(), { once: true }); }); }; |