Support for automatic import of
createElement as h
andsetup
functional component syntax andsetup
template refs
- Automatically import
createElement as h
when writingJSX
- The functional component syntax of the
setup()
by defaultconst Hello = (prop, ctx) => { const state = ref('hello world'); return () => <h1>{state.value}</h1>; };
- Allocating template refs with
JSX
on the render function returned bysetup()
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> } });
- Fixed @vue/[email protected] calling
this
insetup()
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);
};
}
};
Project with @vue/composition-api
and @vue/cli-plugin-babel
installed
-
Install
npm install babel-preset-vca-jsx --save-dev
-
Config
babel.config.js
module.exports = { presets: [ "vca-jsx", "@vue/cli-plugin-babel/preset" ] };
-
Here we need to distinguish between the default
functional
component and thecomposition-api-based
functional
component.-
The default
functional
component is essentially therender
function. The shorthand injsx
is as followsconst Test = ({ props, children, data, ... }) => { return <h1>Hello World!</h1>; };
Tips:The first letter of the variable name must be capitalized. For details of the callback parameters, see Detail
-
The
composition-api functional
component based on this plugin is essentially asetup
function, and the shorthand injsx
is as followsconst Test = (props, { refs, emit, ... }) => { return () => <h1>Hello World!</h1>; };
Tips:The difference from the default
functional
is that arender
function is returned
-