summaryrefslogtreecommitdiff
path: root/packages/renderers/renderer-solid/client.js
diff options
context:
space:
mode:
authorGravatar Ryan Carniato <ryansolid@gmail.com> 2022-04-06 12:42:01 -0700
committerGravatar GitHub <noreply@github.com> 2022-04-06 14:42:01 -0500
commit13b782f421871af36978f29154c715c66739d475 (patch)
treee3839e105411da1ba67445b7a6dc5389e9519cf3 /packages/renderers/renderer-solid/client.js
parentdebdf11b1919cb4f4ca42d08b0a543ac10defcf3 (diff)
downloadastro-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.js27
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
+ );
};