2.0.0-rc.1 • Published 4 months ago

@innet/jsx v2.0.0-rc.1

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

  @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.

stars watchers

Install

npm

npm i @innet/jsx

yarn

yarn add @innet/jsx

TS Setup

preserve

Setup with innet-jsx

tsconfig.json

{
  "compilerOptions": {
    ...
    "jsx": "preserve"
  },
  ...
}

react-jsx

Or setup without innet-jsx

{
  "compilerOptions": {
    ...
    "jsx": "react-jsx",
    "jsxImportSource": "@innet/jsx"
  },
  ...
}

react-jsxdev

To get more error details use react-jsxdev

{
  "compilerOptions": {
    ...
    "jsx": "react-jsxdev",
    "jsxImportSource": "@innet/jsx"
  },
  ...
}

JSX Component

JSX Component is a function that get props argument

function Test (props) {
  console.log(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 } from '@innet/utils'
import { jsxComponent } from '@innet/jsx'

const handler = createHandler([
  nullish([]),
  object([
    jsxComponent,
  ]),
])

function Test ({ children }) {
  console.log(children)
}

innet(<Test>{null}</Test>, handler)
// null

JSX Plugin

jsxPlugins is a plugin which adds default jsx elements by jsx plugins.

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(<sum a={1} b={2} />, handler)
// 3

innet-jsx converts jsx:

innet({
  type: 'sum',
  props: {
    a: 1,
    b: 2,
  }
}, handler)

Context

Use Context to create a context variable.

import { Context } from '@innet/jsx'
const color = new Context('blue')

Use useContext in a component to get current context value.

import { useContext, Context } from '@innet/jsx'

const color = new Context('blue')

function Content () {
  const currentColor = useContext(color)
  console.log(`color: ${currentColor}`)
}

Use ContextProvider to provide values into children.

import innet, { createHandler } from 'innet'
import { object, nullish, arraySync } from '@innet/utils'
import {
  jsxComponent,
  Context,
  useProps,
  useContext,
  ContextProvider
} from '@innet/jsx'

const handler = createHandler([
  nullish([]),
  arraySync,
  object([jsxComponent]),
])

const color = new Context('blue')

function Content () {
  const currentColor = useContext(color)
  console.log(`color: ${currentColor}`)
}

innet((
  <>
    <Content/>
    <ContextProvider for={color} set='red'>
      <Content/>
    </ContextProvider>
  </>
), handler)

//color: blue
//color: red

Issues

If you find a bug or have a suggestion, please file an issue on GitHub.

issues

2.0.0-rc.0

4 months ago

2.0.0-rc.1

4 months ago

2.0.0-beta.2

5 months ago

2.0.0-beta.1

5 months ago

2.0.0-beta.5

5 months ago

2.0.0-beta.4

5 months ago

2.0.0-beta.3

5 months ago

2.0.0-alpha.8

2 years ago

2.0.0-alpha.9

2 years ago

2.0.0-alpha.10

2 years ago

2.0.0-alpha.7

2 years ago

2.0.0-alpha.3

2 years ago

2.0.0-alpha.4

2 years ago

2.0.0-alpha.5

2 years ago

2.0.0-alpha.6

2 years ago

2.0.0-alpha.0

2 years ago

2.0.0-alpha.1

2 years ago

2.0.0-alpha.2

2 years ago

1.2.0

3 years ago

1.2.1

3 years ago

1.1.0

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

0.1.2

3 years ago

0.1.4

3 years ago

0.1.3

3 years ago

0.1.1

4 years ago

0.1.0

4 years ago