2.2.5 • Published 11 months ago

@atomify/jsx v2.2.5

Weekly downloads
115
License
MIT
Repository
github
Last release
11 months ago

@atomify/jsx

Small library for creating Custom Elements from JSX Markup.

Installation @atomify/jsx

npm i @atomify/jsx

Configuration

@atomify/jsx requires @babel/plugin-syntax-jsx and @babel/plugin-transform-react-jsx.

npm install --save-dev @babel/plugin-syntax-jsx @babel/plugin-transform-react-jsx
yarn add --dev @babel/plugin-syntax-jsx @babel/plugin-transform-react-jsx

After you installed the plugins you no need to configure your Babel Settings

{
  "plugins": [
    "@babel/plugin-syntax-jsx",
    ["@babel/plugin-transform-react-jsx", { "pragma": "h" }]
  ]
}

and add the following to your tsconfig.json:

"compilerOptions": {
    "jsx": "react",
    "jsxFactory": "h",
}

@atomify/jsx works together with @atomify/hooks

Render function

To get started using @atomify/jsx, first look at the render() function. This function accepts a tree description and creates the structure described. Next, it appends this structure to a parent DOM element provided as the second argument:

import { h, render } from '@atomify/jsx';
function Title(text: string) {
    return <h1>{text}</h1>
}
render(<Title text="Hello world!" />, document.body);

Serverside rendering

@atomify/jsx is shipped with a renderToString that will functional components into HTML string for SSR usage.

import { renderToString } from '@atomify/jsx'
function Title(text: string) {
    return <h1>{text}</h1>
}

const result = renderToString(<Title text="Hello world" />);

console.log(result) // <h1>Hello world</h1>

@atomify/hooks

import { h , Fragment } from '@atomify/jsx';
import { defineElement, useProp} from '@atomify/hooks';

const CustomElement: FCE = () => {
    const [title] = useProp<Number>('title', 'Hello world!');

    return (
        <Fragment>
            <h1>{ title }</h1>
            <h2>Example title2</h2>
        </Fragment>
    );
};

CustomElement.props = {
    someTitle: {
        type: Number,
        reflectToAttr: true,
    }
};

defineElement('custom-element', CustomElement);

Class and Classname

Both class and className are supported. The class attribute doesnt support object or array anymore since version 2.0 it will be using a plugin that can be installed through @atomify/shared (it accepts a string, array, object or everything combined):

import { classNames } from '@atomify/shared';

<div
    className={classNames('aaa',
        { test1: true, test2: false }, [
        '1',
        false,
    ])}>
</div>

Ref

The ref attribute accepts a function or a direct ref object. The ref object must include the current property.

2.2.5

11 months ago

2.2.4

1 year ago

2.2.2

3 years ago

2.1.10

3 years ago

2.1.11

3 years ago

2.1.9

3 years ago

2.1.8

3 years ago

2.1.7

3 years ago

2.1.6

3 years ago

2.1.5

3 years ago

2.1.2

3 years ago

2.1.4

3 years ago

2.1.3

3 years ago

2.1.1

3 years ago

2.1.0

3 years ago

1.8.0-alpha.0

3 years ago

2.0.0

3 years ago

1.7.1

4 years ago

1.5.9

4 years ago

1.5.8

4 years ago

1.5.7

4 years ago

1.5.6

4 years ago

1.5.5

4 years ago

1.5.4

4 years ago

1.5.3

5 years ago

1.5.2

5 years ago

1.5.1

5 years ago

1.5.0

5 years ago

1.4.0

5 years ago

1.3.1

5 years ago

1.3.0

5 years ago

1.2.0

5 years ago

1.1.0

5 years ago