JSXでHTML文字列を生成
動機
JSXでcomponent分割しつつ、型推論が効いた状態で楽に書きたい 調査
Reactの場合
References
文字列から実行時に変換する
Preactの場合
code:jsx
/** @jsx h */
const Charset = () => <meta charset="utf-8" />;
const Head = ({title}) => <head><Charset /><title>{title}</title></head>;
const Body = () => (
<body>
<h1>Heading 1</h1>
<p>
テスト文字列
</p>
</body>
);
const App = () => (
<html>
<Head title="Hello, World!"/>
<Body />
</html>
);
console.log(renderToString(<App />, {}, { pretty: true }));
まあこんなもんか
JSXからHTMLへの返還だけなら簡単だ
毎回全てのJSXをrenderしなければならない
差分更新が出来ない
毎度esbuildでゼロからbuild & Function()で実行するのを繰り返すしかなさそう
performanceの問題は、適当にthrottleで間引いて解決させるしかない
表現をより簡潔にするには、こうかな?
JSXをほぼベタ打ちできるようにする
hとrenderToStringのimport構文を不要にする
最終的にrenderしたいJSXをdefault exportする
code:example.tsx
const Body = () => <body />
export default = (<html>
<head />
<Body />
</html>)
esbuildでHTMLに変換する
その際、pluginか何かでhなどのimportとrenderToString()によるrenderingを追加する
jsx pramgaも設定する
出来たHTMLは<iframe>に読ませるなり別タブで開くなりする