diff options
Diffstat (limited to 'packages/integrations/solid/client.js')
-rw-r--r-- | packages/integrations/solid/client.js | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/packages/integrations/solid/client.js b/packages/integrations/solid/client.js index d31c5cecd..005f3c980 100644 --- a/packages/integrations/solid/client.js +++ b/packages/integrations/solid/client.js @@ -1,21 +1,27 @@ import { sharedConfig } from 'solid-js'; -import { hydrate, createComponent } from 'solid-js/web'; +import { hydrate, render, createComponent } from 'solid-js/web'; -export default (element) => (Component, props, childHTML) => { +export default (element) => (Component, props, childHTML, { client }) => { // Prepare global object expected by Solid's hydration logic if (!window._$HY) { window._$HY = { events: [], completed: new WeakSet(), r: {} }; } + if (!element.hasAttribute('ssr')) return; + + const fn = client === 'only' ? render : hydrate; + // Perform actual hydration let children; - hydrate( + fn( () => createComponent(Component, { ...props, get children() { if (childHTML != null) { // hydrating - if (sharedConfig.context) children = element.querySelector('astro-fragment'); + if (sharedConfig.context) { + children = element.querySelector('astro-fragment'); + } if (children == null) { children = document.createElement('astro-fragment'); |