diff options
author | 2022-04-06 12:42:01 -0700 | |
---|---|---|
committer | 2022-04-06 14:42:01 -0500 | |
commit | 13b782f421871af36978f29154c715c66739d475 (patch) | |
tree | e3839e105411da1ba67445b7a6dc5389e9519cf3 /packages/renderers/renderer-solid/client.js | |
parent | debdf11b1919cb4f4ca42d08b0a543ac10defcf3 (diff) | |
download | astro-13b782f421871af36978f29154c715c66739d475.tar.gz astro-13b782f421871af36978f29154c715c66739d475.tar.zst astro-13b782f421871af36978f29154c715c66739d475.zip |
fix: Nested hydration with Solid (#3003)
* fix: solid nested hydration
* Create ten-rice-unite.md
Co-authored-by: Nate Moore <natemoo-re@users.noreply.github.com>
Diffstat (limited to 'packages/renderers/renderer-solid/client.js')
-rw-r--r-- | packages/renderers/renderer-solid/client.js | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/packages/renderers/renderer-solid/client.js b/packages/renderers/renderer-solid/client.js index b67b3acdb..4424e9b98 100644 --- a/packages/renderers/renderer-solid/client.js +++ b/packages/renderers/renderer-solid/client.js @@ -1,14 +1,25 @@ +import { sharedConfig } from 'solid-js'; import { hydrate, createComponent } from 'solid-js/web'; export default (element) => (Component, props, childHTML) => { let children; - if (childHTML != null) { - children = document.createElement('astro-fragment'); - children.innerHTML = childHTML; - } + hydrate( + () => + createComponent(Component, { + ...props, + get children() { + if (childHTML != null) { + // hydrating + if (sharedConfig.context) children = element.querySelector('astro-fragment'); - // Using Solid's `hydrate` method ensures that a `root` is created - // in order to properly handle reactivity. It also handles - // components that are not native HTML elements. - hydrate(() => createComponent(Component, { ...props, children }), element); + if (children == null) { + children = document.createElement('astro-fragment'); + children.innerHTML = childHTML; + } + } + return children; + }, + }), + element + ); }; |