summaryrefslogtreecommitdiff
path: root/src/frontend/render/react.ts
blob: 7143516f66921500a301a78f9ade388452615a2d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import { Renderer, createRenderer } from './renderer';
import React from 'react';
import ReactDOMServer from 'react-dom/server';

const ReactRenderer: Renderer = {
  renderStatic(Component) {
    return async (props, ...children) => ReactDOMServer.renderToString(React.createElement(Component, props, children));
  },
  imports: {
    react: ['default as React'],
    'react-dom': ['default as ReactDOM'],
  },
  render({ Component, root, props }) {
    return `ReactDOM.render(React.createElement(${Component}, ${props}), ${root})`;
  },
};

const renderer = createRenderer(ReactRenderer);

export const __react_static = renderer.static;
export const __react_load = renderer.load;
export const __react_idle = renderer.idle;
export const __react_visible = renderer.visible;