支持自动导入
createElement as h
以及setup
函数式组件语法和setup
中的模板refs引用
- 写
JSX
时自动导入createElement as h
- 默认只有
setup()
的函数式组件语法const Hello = (prop, ctx) => { const state = ref('hello world'); return () => <h1>{state.value}</h1>; };
- 在
setup()
返回的渲染函数上使用JSX
分配模板引用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> } });
- 修复 @vue/[email protected] 在
setup()
中调用this
的问题
编译前
import { ref } from '@vue/composition-api';
const Hello = (prop, ctx) => {
const state = ref('Hello World!');
return () => (
<h1>{state.value}</h1>
);
};
编译后
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);
};
}
};
已安装@vue/composition-api
和@vue/cli-plugin-babel
的项目
-
安装
npm install babel-preset-vca-jsx --save-dev
-
配置
babel.config.js
module.exports = { presets: [ "vca-jsx", "@vue/cli-plugin-babel/preset" ] };
-
这里需要区分默认的
functional
组件和基于composition-api
的functional
组件的概念-
默认的
functional
组件实质是render
函数,jsx
中的简写写法如下const Test = ({ props, children, data, ... }) => { return <h1>Hello World!</h1>; };
注:变量名首字母必须为大写,具体回调参数见详情
-
基于本插件的
composition-api functional
实质是setup
函数,jsx
中的简写写法如下const Test = (props, { refs, emit, ... }) => { return () => <h1>Hello World!</h1>; };
注:与默认
functional
的区别是返回了一个render
函数
-