@innet/jsx
Abstract
JSX is one of the main features you can use with innet. JSX makes possible to use XML-ish syntax in JavaScript.
If you want to use JSX with innet you can check
- @innet/dom to use it on client side
- @innet/server to use it on server side
- innetjs if you want to try innet ecosystem
- innet-jsx converts
jsx
/tsx
intojs
/ts
- rollup-plugin-innet-jsx to use it with rollup
This package contains plugins that handle jsx components and templates.
Install
npm
npm i @innet/jsx
yarn
yarn add @innet/jsx
JSX Component
JSX Component is a function that get props
argument
function Test (props) {
return props?.id
}
Create a handler to handle JSX Component
import innet, { createHandler } from 'innet'
import { object } from '@innet/utils'
import { jsxComponent } from '@innet/jsx'
const handler = createHandler([
object([
jsxComponent,
]),
])
Here we say: an object should be handled as jsxComponent
Then we can use it as wall
innet(<Test id='test' />, handler)
// 'test'
innet(<Test />, handler)
// undefined
If you try to use null
, you can get an error, because of null
is an object. To prevent this, use nullish
import innet, { createHandler } from 'innet'
import { object, nullish, stop } from '@innet/utils'
import { jsxComponent } from '@innet/jsx'
const handler = createHandler([
nullish([
stop,
]),
object([
jsxComponent,
]),
])
function Test (props, children) {
return children
}
innet(<Test>{null}</Test>, handler)
// [ null ]
JSX Plugin
The las feature of this package is jsxPlugins
.
This is a plugin which adds default jsx components by jsx plugins.
import innet, { createHandler } from 'innet'
import { object, nullish, stop } from '@innet/utils'
import { jsxPlugins } from '@innet/jsx'
// JSX Plugin
const sum = ({ a, b }) => a + b
const handler = createHandler([
nullish([stop]),
object([
jsxPlugins({
sum,
}),
])
])
innet(<sum a={1} b={2} />, handler)
// 3
JSX Plugin gets app and handler as arguments. App is JSX Element which can contain type, props and children fields.
innet-jsx converts this code to:
innet({
type: 'sum',
props: {
a: 1,
b: 2,
}
}, handler)
Check @innet/html or @innet/swith as example of JSX Plugin.
Issues
If you find a bug or have a suggestion, please file an issue on GitHub.