Babel Preset JSX

本文详细介绍了如何在Vue.js项目中安装并使用JSX语法,包括基本的安装步骤、语法特性如组件、属性、插槽的使用,以及指令和功能性组件的实现方式。适用于希望将JSX集成到Vue项目的前端开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Installation

Install the preset with:

npm install @vue/babel-preset-jsx @vue/babel-helper-vue-jsx-merge-props
Then add the preset to .babelrc:

{
  "presets": ["@vue/babel-preset-jsx"]
}

Syntax

Content

render() {
  return <p>hello</p>
}

with dynamic content:

render() {
  return <p>hello { this.message }</p>
}

when self-closing:

render() {
  return <input />
}

with a component:

import MyComponent from ‘./my-component’

export default {
  render() {
    return <MyComponent>hello</MyComponent>
  },
}

Attributes/Props

render() {
  return <input type="email" />
}

with a dynamic binding:

render() {
  return <input
    type="email"
    placeholder={this.placeholderText}
  />
}

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 }} />
}

Slots
named slots:

render() {
  return (
    <MyComponent>
      <header slot="header">header</header>
      <footer slot="footer">footer</footer>
    </MyComponent>
  )
}

scoped slots:

render() {
  const scopedSlots = {
    header: () => <header>header</header>,
    footer: () => <footer>footer</footer>
  }

  return <MyComponent scopedSlots={scopedSlots} />
}

Directives

<input vModel={this.newTodoText} />

with a modifier:

<input vModel_trim={this.newTodoText} />

with an argument:

<input vOn:click={this.newTodoText} />

with an argument and modifiers:

<input vOn:click_stop_prevent={this.newTodoText} />

v-html:

<p domPropsInnerHTML={html} />

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>

or PascalCase variable declarations:

const HelloWorld = ({ props }) => <p>hello {props.message}</p>

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.
https://github.com/vuejs/jsx#installation

首先,你需要安装Webpack和Babel的相关依赖包。 ``` npm install webpack webpack-cli babel-loader @babel/core @babel/preset-env @babel/preset-react --save-dev ``` 接下来,在根目录下创建一个`webpack.config.js`文件,配置Webpack和Babel的相关设置。 ``` const path = require('path'); module.exports = { entry: './src/index.js', output: { path: path.resolve(__dirname, 'dist'), filename: 'bundle.js' }, module: { rules: [ { test: /\.jsx?$/, exclude: /node_modules/, use: { loader: 'babel-loader', options: { presets: ['@babel/preset-env', '@babel/preset-react'] } } } ] } }; ``` 其中,`entry`指定了入口文件,`output`指定了打包后的输出路径和文件名。`module`中的`rules`是用来设置Webpack对不同类型的文件进行处理的规则。这里我们使用`babel-loader`来处理`.jsx`文件,将其转换为浏览器可读的JavaScript文件。 接下来,在`src`目录下创建一个`index.js`文件,编写一些JSX代码。 ``` import React from 'react'; import ReactDOM from 'react-dom'; const App = () => <div>Hello World!</div>; ReactDOM.render(<App />, document.getElementById('root')); ``` 最后,在`index.html`中引入打包后的`bundle.js`文件,并在页面中添加一个`id`为`root`的`div`元素。 ``` <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Webpack + Babel + JSX Demo</title> </head> <body> <div id="root"></div> <script src="./dist/bundle.js"></script> </body> </html> ``` 现在,运行`webpack`命令进行打包,打开`index.html`就可以看到页面中显示了`Hello World!`。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值