详解如何使用webpack在vue项目中写jsx语法


Posted in Javascript onNovember 08, 2017

本文介绍了如何使用webpack在vue项目中写jsx语法,分享给大家,具体如下:

我们知道Vue 2.0中对虚拟DOM的支持。我们可以通过JavaScript动态的创建元素,而不用在template中写HTML代码。虚拟DOM最终将被渲染为真正的DOM。

data: {
 msg: 'Hello world'
},
render (h) {
 return h(
 'div',
 { attrs: { id: 'my-id' },
 [ this.msg ]
 );
}

渲染后的内容为:

<div id='my-id'>Hello world</div>

Vue 2.0中的render为我们开启了一片新的天地,赋予了我们无限的想象力。比如,我们可以把React中用到的JSX语法应用到Vue中来。接下来,我们就聊聊怎么在Vue项目中使用JSX.

JSX简介

JSX是基于Javascript的语言扩展, 它允许在Javascript代码中插入XML语法风格的代码。如下所示:

data: {
 msg: 'Hello world'
},
render (h) {
 return (
 <div id='my-id'>,
  { this.msg } 
 </div>
 );
}

但值得注意的是,浏览器默认是解析不了JSX的,它必须要先编译成标准的JavaScript代码才可以运行。就像我们需要将sass或者less编译为CSS代码之后才能运行一样。

在Vue中使用JSX

Vue框架并没有特意地去支持JSX,其实它也没必要去支持,因为JSX最后都会编译为标准的JavaScript代码。既然这样, 那Vue和JSX为什么能配合在一起使用呢? 很简单, 因为Vue支持虚拟DOM, 你可以用JSX或者其他预处理语言,只要能保证render方法正常工作即可。

Vue官方提供了一个叫做babel-plugin-transform-vue-jsx的插件来编译JSX, 我们稍后介绍如何使用它。

为什么要在Vue中使用JSX

为什么要再Vue中使用JSX ? 其实Vue并没有强迫你去使用JSX, 它只是提供了一种新的方式而已。正所谓萝卜青菜,各有所爱。有的人觉得在render方法中使用JSX更简洁,有的人却觉得在JavaScript代码中混入HTML代码很恶心。反正你喜欢就用,不喜欢就不用呗。废话少说,我们先看一个简单的应用:
script.js

new Vue({
 el: '#app',
 data: {
 msg: 'Click to see the message'
 },
 methods: {
 hello () {
  alert('This is the message')
 }
 }
});

index.html

<div id="app">
 <span 
  class="my-class" 
  style="cursor: pointer" 
  v-on:click="hello"
 >
  {{ msg }}
 </span>
</div>

代码很简单,就是在页面上显示一个span, 里面的内容为"Click to see the message"。当点击内容时,弹出一个alert。我们看看用render怎么实现。

用Vue 2.0中的render函数实现

script.js

new Vue({
 el: '#app',
 data: {
 msg: 'Click to see the message'
 },
 methods: {
 hello () {
  alert('This is the message')
 }
 },
 render (createElement) {
 return createElement(
  'span',
  {
  class: { 'my-class': true },
  style: { cursor: 'pointer' },
  on: {
   click: this.hello
  }
  },
  [ this.msg ]
 );
 },
});

index.html

<div id="app"><!--span will render here--></div>

使用JSX来实现

script.js

new Vue({
 el: '#app',
 data: {
 msg: 'Click to see the message.'
 },
 methods: {
 hello () {
  alert('This is the message.')
 }
 },
 render: function render(h) {
 return (
  <span
  class={{ 'my-class': true }}
  style={{ cursor: 'pointer' }}
  on-click={ this.hello }
  >
  { this.msg }
  </span>
 )
 }
});

index.html和上文一样。

babel-plugin-transform-vue-jsx

正如前文所说, JSX是需要编译为JavaScript才可以运行的, 所以第三个样例需要有额外的编译步骤。这里我们用Babel和Webpack来进行编译。

打开你的webpack.config.js文件, 加入babel loader:

loaders: [
 { test: /\.js$/, loader: 'babel', exclude: /node_modules/ }
]

新建或者修改你的.babelrc文件,加入 babel-plugin-transform-vue-jsx 这个插件

{
 "presets": ["es2015"],
 "plugins": ["transform-vue-jsx"]
}

现在运行webpack, 代码里面的JSX就会被正确的编译为标准的JavaScript代码。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Ajax 数据请求的简单分析
Apr 05 Javascript
基于jquery的滚动条滚动固定div(附演示下载)
Oct 29 Javascript
ajax+jQuery实现级联显示地址的方法
May 06 Javascript
angularjs表格ng-table使用备忘录
Mar 09 Javascript
Angular.js如何从PHP读取后台数据
Mar 24 Javascript
bootstrap监听滚动实现头部跟随滚动
Nov 08 Javascript
jQuery扩展实现text提示还能输入多少字节的方法
Nov 28 Javascript
js图片放大镜实例讲解(必看篇)
Jul 17 Javascript
小程序兼容安卓和IOS数据处理问题及坑
Sep 18 Javascript
原生javascript如何实现共享onload事件
Jul 03 Javascript
js利用iframe实现选项卡效果
Aug 09 Javascript
Vue中ref和$refs的介绍以及使用方法示例
Jan 11 Vue.js
thinkjs 文件上传功能实例代码
Nov 08 #Javascript
基于jQuery的$.getScript方法去加载javaScript文档解析
Nov 08 #jQuery
在React 组件中使用Echarts的示例代码
Nov 08 #Javascript
浅谈mint-ui loadmore组件注意的问题
Nov 08 #Javascript
es6在react中的应用代码解析
Nov 08 #Javascript
mac中利用NVM管理不同node版本的方法详解
Nov 08 #Javascript
浅谈vue-router2路由参数注意的问题
Nov 08 #Javascript
You might like
php实现简单爬虫的开发
2016/03/28 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
PHP实现Session入库/存入redis的方法
2017/05/04 PHP
PHP读取Excel类文件
2017/05/15 PHP
设定php简写功能的方法
2019/11/28 PHP
几款极品的javascript压缩混淆工具
2007/05/16 Javascript
js中top/parent/frame概述及案例应用
2013/02/06 Javascript
JS冒泡事件的快速解决方法
2013/12/16 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
2014/02/13 Javascript
JavaScript显示表单内元素数量的方法
2015/04/02 Javascript
如何防止JavaScript自动插入分号
2015/11/05 Javascript
AngularJS实现表单手动验证和表单自动验证
2015/12/09 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
JS取数字小数点后两位或n位的简单方法
2016/10/24 Javascript
vue.js实现条件渲染的实例代码
2017/06/22 Javascript
Axios学习笔记之使用方法教程
2017/07/21 Javascript
浅谈vue引入css,less遇到的坑和解决方法
2018/01/20 Javascript
JS设计模式之策略模式概念与用法分析
2018/02/05 Javascript
使用validate.js实现表单数据提交前的验证方法
2018/09/04 Javascript
中高级前端必须了解的JS中的内存管理(推荐)
2019/07/04 Javascript
微信小程序如何实现在线客服功能
2019/10/16 Javascript
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
2019/11/18 NodeJs
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
jenkins自动构建发布vue项目的方法步骤
2021/01/04 Vue.js
[02:32]DOTA2亚洲邀请赛 VG战队巡礼
2015/02/03 DOTA
python中List的sort方法指南
2014/09/01 Python
Python实现返回数组中第i小元素的方法示例
2017/12/04 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
2018/05/22 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
2018/07/06 Python
Django安装配置mysql的方法步骤
2018/10/15 Python
对python多线程中Lock()与RLock()锁详解
2019/01/11 Python
TripAdvisor印尼站:全球领先的旅游网站
2018/03/15 全球购物
给老师的道歉信
2014/01/11 职场文书
三年大学自我鉴定
2014/01/16 职场文书
CSS3实现的水平标题菜单
2021/04/14 HTML / CSS
python 模拟在天空中放风筝的示例代码
2021/04/21 Python