summaryrefslogtreecommitdiff
path: root/packages/integrations/react/client.js
diff options
context:
space:
mode:
authorGravatar Nate Moore <natemoo-re@users.noreply.github.com> 2023-08-29 09:30:11 -0500
committerGravatar GitHub <noreply@github.com> 2023-08-29 09:30:11 -0500
commit1f58a7a1bea6888868b689dac94801d554319b02 (patch)
treed211fa64f18e32ca0798e1ca93b96c2477eea322 /packages/integrations/react/client.js
parent9e021a91c57d10809f588dd47968fc0e7f8b4d5c (diff)
downloadastro-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.js10
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 });
});
};