summaryrefslogtreecommitdiff
path: root/src/frontend/render/react.ts
diff options
context:
space:
mode:
authorGravatar Nate Moore <natemoo-re@users.noreply.github.com> 2021-04-15 10:55:50 -0500
committerGravatar GitHub <noreply@github.com> 2021-04-15 10:55:50 -0500
commit22ca9e0aacf26bf82aa5d0ddd6d1e1d495a1a945 (patch)
treedb56218dd905aca708e39fae6c58d31f99df24dc /src/frontend/render/react.ts
parentea33d7b2ab30f6434986bb0d8671e7f681076268 (diff)
downloadastro-22ca9e0aacf26bf82aa5d0ddd6d1e1d495a1a945.tar.gz
astro-22ca9e0aacf26bf82aa5d0ddd6d1e1d495a1a945.tar.zst
astro-22ca9e0aacf26bf82aa5d0ddd6d1e1d495a1a945.zip
Support children inside of components (#72)
* chore(examples): add kitchen-sink * feat: support children in rendered components * feat: add support for rendering children in Svelte * fix: cleanup p/react fragment children * chore: add @ts-nocheck to svelte files * chore: update lockfiles * fix: types * feat: memoize frontend/renderer/utils * fix: disable eslint for compiled SvelteWrapper * fix: add missing dep Co-authored-by: Nate Moore <nate@skypack.dev>
Diffstat (limited to 'src/frontend/render/react.ts')
-rw-r--r--src/frontend/render/react.ts11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/frontend/render/react.ts b/src/frontend/render/react.ts
index 56c6decb0..ac812e9c1 100644
--- a/src/frontend/render/react.ts
+++ b/src/frontend/render/react.ts
@@ -2,17 +2,22 @@ import type { ComponentRenderer } from '../../@types/renderer';
import React, { ComponentType } from 'react';
import ReactDOMServer from 'react-dom/server';
import { createRenderer } from './renderer';
+import { childrenToVnodes } from './utils';
const ReactRenderer: ComponentRenderer<ComponentType> = {
+ jsxPragma: React.createElement,
+ jsxPragmaName: 'React.createElement',
renderStatic(Component) {
- return async (props, ...children) => ReactDOMServer.renderToString(React.createElement(Component, props, children));
+ return async (props, ...children) => {
+ return ReactDOMServer.renderToString(React.createElement(Component, props, childrenToVnodes(React.createElement, children)));
+ }
},
imports: {
react: ['default: React'],
'react-dom': ['default: ReactDOM'],
},
- render({ Component, root, props }) {
- return `ReactDOM.render(React.createElement(${Component}, ${props}), ${root})`;
+ render({ Component, root, children, props }) {
+ return `ReactDOM.hydrate(React.createElement(${Component}, ${props}, React.createElement(React.Fragment, null, ...${children})), ${root})`;
},
};