diff options
Diffstat (limited to 'packages/integrations/react/client-v17.js')
-rw-r--r-- | packages/integrations/react/client-v17.js | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/packages/integrations/react/client-v17.js b/packages/integrations/react/client-v17.js new file mode 100644 index 000000000..bd17050ea --- /dev/null +++ b/packages/integrations/react/client-v17.js @@ -0,0 +1,22 @@ +import { createElement } from 'react'; +import { hydrate, render, unmountComponentAtNode } from 'react-dom'; +import StaticHtml from './static-html.js'; + +export default (element) => + (Component, props, { default: children, ...slotted }, { client }) => { + for (const [key, value] of Object.entries(slotted)) { + props[key] = createElement(StaticHtml, { value, name: key }); + } + const componentEl = createElement( + Component, + props, + children != null ? createElement(StaticHtml, { value: children }) : children, + ); + + const isHydrate = client !== 'only'; + const bootstrap = isHydrate ? hydrate : render; + bootstrap(componentEl, element); + element.addEventListener('astro:unmount', () => unmountComponentAtNode(element), { + once: true, + }); + }; |