詳解如何使用webpack在vue項目中寫jsx語法
本文介紹了如何使用webpack在vue項目中寫jsx語法,分享給大家,具體如下:
我們知道Vue 2.0中對虛擬DOM的支持。我們可以通過JavaScript動態(tài)的創(chuàng)建元素,而不用在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怎么實現(xiàn)。
用Vue 2.0中的render函數(shù)實現(xiàn)
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來實現(xiàn)
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"]
}
現(xiàn)在運行webpack, 代碼里面的JSX就會被正確的編譯為標準的JavaScript代碼。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Vue3使用transition實現(xiàn)組件切換的過渡效果
<Transition> 是一個內置組件,這意味著它在任意別的組件中都可以被使用,無需注冊,它可以將進入和離開動畫應用到通過默認插槽傳遞給它的元素或組件上,本文介紹了Vue3使用transition實現(xiàn)組件切換的過渡效果,需要的朋友可以參考下2024-09-09
uniapp?vue3中使用webview在微信小程序實現(xiàn)雙向通訊功能
微信小程序的存在許多功能上的限制和約束,有些情況不得不去使用webview進行開發(fā)實現(xiàn)需求,這篇文章主要給大家介紹了關于uniapp?vue3中使用webview在微信小程序實現(xiàn)雙向通訊功能的相關資料,需要的朋友可以參考下2024-07-07
vue3+elementPlus?table中添加輸入框并提交校驗
這篇文章主要介紹了vue3+elementPlus?table里添加輸入框并提交校驗,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08

