# Vue 3 Babel JSX 插件 [![CircleCI](https://circleci.com/gh/vuejs/jsx-next.svg?style=svg)](https://circleci.com/gh/vuejs/vue-next) [![npm package](https://img.shields.io/npm/v/@vue/babel-plugin-jsx.svg?style=flat-square)](https://www.npmjs.com/package/@vue/babel-plugin-jsx) 以 JSX 的方式来编写 Vue 代码 [English](/packages/babel-plugin-jsx/README.md) | 简体中文 ## 安装 安装插件 ```bash npm install @vue/babel-plugin-jsx -D ``` 配置 Babel ```js { "plugins": ["@vue/babel-plugin-jsx"] } ``` ## 使用 ### 参数 #### transformOn Type: `boolean` Default: `false` 把 `on: { click: xx }` 转成 `onClick: xxx` #### optimize Type: `boolean` Default: `false` 是否开启优化. 如果你对 Vue 3 不太熟悉,不建议打开 #### isCustomElement Type: `(tag: string) => boolean` Default: `undefined` 自定义元素 #### mergeProps Type: `boolean` Default: `true` 合并 class / style / onXXX handlers ## 表达式 ### 内容 函数式组件 ```jsx const App = () =>
; ``` 在 render 中使用 ```jsx const App = { render() { return
Vue 3.0
; } }; ``` ```jsx import { withModifiers, defineComponent } from 'vue'; const App = defineComponent({ setup() { const count = ref(0); const inc = () => { count.value++; }; return () => (
{count.value}
); } }); ``` Fragment ```jsx const App = () => ( <> I'm Fragment ); ``` ### Attributes / Props ```jsx const App = () => ; ``` with a dynamic binding: ```jsx const placeholderText = 'email'; const App = () => ( ); ``` ### 指令 v-show ```jsx const App = { data() { return { visible: true }; }, render() { return ; }, }; ``` v-model > 注意:如果想要使用 `arg`, 第二个参数需要为字符串 ```jsx ``` ```jsx ``` ```jsx ``` 会变编译成: ```js h(A, { 'foo': val, "fooModifiers": { "bar": true }, "onUpdate:foo": $event => val = $event }) ``` 自定义指令 ```jsx const App = { directives: { custom: customDirective }, setup() { return () => ( ); }, }; ``` ### 插槽 ```jsx const App = { setup() { const slots = { default: () =>
A
, foo: () => B }; return () =>
; } }; ``` ### 在 TypeSript 中使用 `tsconfig.json`: ```json { "compilerOptions": { "jsx": "preserve" } } ``` ## 谁在用

Ant Design Vue

Vant

Element Plus
## 兼容性 要求: - **Babel 7+** - **Vue 3+**