Generate HTML elements using HTM ("Hyperscript Tagged Markup") or JSX.
(4.20 KiB / gzip: 1.90 KiB)
pnpm add tmpl-htm
import { tmplTag } from 'tmpl-htm';
const element = tmplTag`<${Component} />`;
- If you don't want to use 'tmplTag', you can use 'JSX' as an alternative.
import { h } from 'tmpl-htm';
// Setting JSX - Babel
...
{
"plugins": [
["@babel/plugin-transform-react-jsx", {
"pragma": "h",
"pragmaFrag": "Fragment",
}]
]
}
...
// Setting JSX - Typescript < 4.1.1
...
{
"compilerOptions": {
"jsx": "react",
"jsxFactory": "h",
"jsxFragmentFactory": "Fragment",
//...
}
}
...
// Setting JSX - Typescript >= 4.1.1
...
{
"compilerOptions": {
"jsx": "react-jsx",
"jsxImportSource": "tmpl-htm",
//...
}
}
...
// Setting JSX - If you use TypeScript within a Babel toolchain
...
// typescript config
{
"compilerOptions": {
"jsx": "preserve",
"jsxFactory": "h",
"jsxFragmentFactory": "Fragment",
//...
}
}
// babel config
{
presets: [
"@babel/env",
["@babel/typescript", { jsxPragma: "h" }],
],
plugins: [
["@babel/transform-react-jsx", { pragma: "h" }]
],
}
...
import { Fragment, tmplTag, appendAll } from 'tmpl-htm';
const Component = (props) => {
return tmplTag`
<${Fragment}>
<li>count: ${props.count}</li>
<button>increase</button>
<//>
`;
});
document.body.appendChild(tmplTag`<${Component} a=${7} />`);
appendAll(tmplTag`<${Component} a=${7} />`, document.querySelectorAll('.target'));
// append, appendAll, prepend, prependAll, replace, replaceAll, insertBefore, insertBeforeAll,
<script src="https://cdn.jsdelivr.net/npm/tmpl-htm@1.0.0/dist/tmplHtm.umd.js"></script>
<div class="target"></div>
<script>
const { Fragment, tmplTag, appendAll } = tmplHtm;
const Component = (props) => {
return tmplTag`
<${Fragment}>
<li>count: ${props.count}</li>
<button>increase</button>
<//>
`;
});
document.body.appendChild(tmplTag`<${Component} a=${7} />`);
appendAll(tmplTag`<${Component} a=${7} />`, document.querySelectorAll('.target'));
// append, appendAll, prepend, prependAll, replace, replaceAll, insertBefore, insertBeforeAll,
</script>
- htm - making Hyperscript Tagged Markup possible
It's open source, so you can develop and contribute together.
npm install -g pnpm
git clone https://github.com/superlucky84/tmpl-htm.git
cd tmpl-htm
pnpm install
pnpm build
pnpm dev
// pnpm install
pnpm test