/innet--jsx

Primary LanguageJavaScriptMIT LicenseMIT

InnetJs logo by Mikhail Lysikov

  @innet/jsx

 

NPM downloads changelog license

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

This package contains plugins that handle jsx components and templates.

stars watchers

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.

issues