Babel Preset JSX
Original address: github.com/vuejs/jsx/b…
Configurable Babel preset to add Vue JSX support. See the configuration options here.
Installation
Install the preset with:
npm install @vue/babel-preset-jsx @vue/babel-helper-vue-jsx-merge-props
Copy the code
Then add the preset to .babelrc
:
{
"presets": ["@vue/babel-preset-jsx"]}Copy the code
Syntax
Content
render() {
return <p>hello</p>
}
Copy the code
with dynamic content:
render() {
return <p>hello { this.message }</p>
}
Copy the code
when self-closing:
render() {
return <input />
}
Copy the code
with a component:
import MyComponent from './my-component'
export default {
render() {
return <MyComponent>hello</MyComponent>}}Copy the code
Attributes/Props
render() {
return <input type="email" />
}
Copy the code
with a dynamic binding:
render() {
return <input
type="email"
placeholder={this.placeholderText}
/>
}
Copy the code
with the spread operator (object needs to be compatible with Vue Data Object):
render() {
const inputAttrs = {
type: 'email'.placeholder: 'Enter your email'
}
return <input {.{ attrs: inputAttrs}} / >
}
Copy the code
Directives
<input vModel="newTodoText" />
Copy the code
with a modifier:
<input vModel_trim="newTodoText" />
Copy the code
with an argument:
<input vOn:click="newTodoText" />
Copy the code
with an argument and modifiers:
<input vOn:click_stop_prevent="newTodoText" />
Copy the code
Functional Components
Transpiles arrow functions that return JSX into functional components, when they are either default exports:
export default ({ props }) => <p>hello { props.message }</p>
Copy the code
or PascalCase variable declarations:
const HelloWorld = ({ props }) => <p>hello { props.message }</p>
Copy the code
Compatibility
This repo is only compatible with:
- Babel 7+. For Babel 6 support, use vuejs/babel-plugin-transform-vue-jsx
- Vue 2+. JSX is not supported for older versions.