@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.
Install
npmnpm i @innet/jsx
yarn
yarn add @innet/jsx
JSX Component
JSX Component is a function that getprops
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 ```typescript jsx innet(, handler) // 'test'
innet(, handler) // undefined
If you try to use `null`, you can get an error, because of `null` is an object. To prevent this, use `nullish`
```typescript jsx
import innet, { createHandler } from 'innet'
import { object, nullish } from '@innet/utils'
import { jsxComponent, useChildren } from '@innet/jsx'
const handler = createHandler([
nullish([]),
object([
jsxComponent,
]),
])
function Test () {
console.log(useChildren())
}
innet(<Test>{null}</Test>, handler)
// [ null ]
JSX Plugin
jsxPlugins
is a plugin which adds default jsx elements by jsx plugins.```typescript jsx import innet, { createHandler } from 'innet' import { object, nullish } from '@innet/utils' import { jsxPlugins, useProps } from '@innet/jsx'
// JSX Plugin const sum = () => { const { a, b } = useProps() console.log(a + b) }
const handler = createHandler( nullish(), object(
jsxPlugins({
sum,
}),
)
)innet(, handler) // 3
[innet-jsx](https://www.npmjs.com/package/innet-jsx) converts this code to:
```typescript
innet({
type: 'sum',
props: {
a: 1,
b: 2,
}
}, handler)