luwanquan / babel-preset-vca-jsx

Automatically imports createElement as h when writing JSX and functional syntax that supports only setup() and template refs that supports setup()
https://codesandbox.io/s/babel-preset-vca-jsx-example-7k5xs
75 stars 8 forks source link
auto-import babel-preset composition-api createelement functional h jsx refs setup template vue

babel-preset-vca-jsx

Support for automatic import of createElement as h and setup functional component syntax and setup template refs

Feature

  1. Automatically import createElement as h when writing JSX
  2. The functional component syntax of the setup() by default
    const Hello = (prop, ctx) => {
        const state = ref('hello world');
        return () => <h1>{state.value}</h1>;
    };
  3. Allocating template refs with JSX on the render function returned by setup()
    const Hello = createComponent({
        setup() {
            const root = ref(null);
            watch(() => console.log(root.value)); // <h1>...</h1>
            /*
            return () => h('h1', {
                ref: root
            }, 'hello world!');
            */
            return () => <h1 ref={root}>hello world!</h1>
        }
    });
  4. Fixed @vue/babel-sugar-v-model@1.1.2 calling this in setup()

Example

Before compiling

import { ref } from '@vue/composition-api';

const Hello = (prop, ctx) => {
    const state = ref('Hello World!');
    return () => (
        <h1>{state.value}</h1>
    );
};

After compilation

import { ref, createElement as h } from '@vue/composition-api';

const Hello = {
    setup: (prop, ctx) => {
        const state = ref('Hello World!');
        return () => {
            return h('h1', state.value);
        };
    }
};

Prerequisite

Project with @vue/composition-api and @vue/cli-plugin-babel installed

How to use?

  1. Install

    npm install babel-preset-vca-jsx --save-dev
  2. Config babel.config.js

    module.exports = {
        presets: [
            "vca-jsx",
            "@vue/cli-plugin-babel/preset"
        ]
    };

Note