最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue3?中使用?jsx?開發(fā)的詳細(xì)過程

 更新時間:2022年09月05日 15:47:14   作者:雪急飛緒  
這篇文章主要介紹了vue3?中使用?jsx?開發(fā),本文著重說一下在使用 .vue 文件和 .jsx 文件在使用語法上的差異,需要的朋友可以參考下

安裝 JSX 插件

在 Vue2 中要想使用 jsx 開發(fā),需要安裝 @vue/babel-preset-jsx 等插件,之后在 babel 里指定即可,詳細(xì)可以參考下面的 Vue2 GitHub 文檔

Vue2:GitHub 文檔 —— Babel Preset JSX

最近在使用 Vue3,突然想用 jsx 進(jìn)行開發(fā)部分頁面,順便記錄一下,也可以參考下面的 Vue3 GitHub 文檔

Vue3:GitHub 文檔 —— Babel Plugin JSX for Vue 3.0

構(gòu)建工具使用的是 vite,要想使用 jsx 開發(fā),需要安裝 @vitejs/plugin-vue-jsx,之后配置 vite.config.js 里的 plugins 即可

// vite.config.js
import vueJsx from '@vitejs/plugin-vue-jsx'
import { defineConfig } from 'vite'

export default defineConfig(() => {
  return {
    plugins: [vueJsx()]
  }
})

接下來著重說一下在使用 .vue 文件和 .jsx 文件在使用語法上的差異

使用語法差異

模板

之前在 template 里寫的 html 代碼需要放到 render 函數(shù)或 setup 函數(shù)里,Vue3 在 setup 里寫會好一點

<!-- .vue -->
<template>
  <div>Hello World</div>
</template>

<!-- .jsx -->
<script>
export default defineComponent({
  setup() {
    return () => (
      <div>Hello World</div>
    )
  }
})
</script>

指令

需要把雙引號改為單括號

  • v-if、v-show、v-html等同理
  • v-bind也是一樣的,不過需要把動態(tài)綁定需要去掉:

注意:

  • .vue文件中,ref 在模板中會自動進(jìn)行解包,所以不需要使用.value
  • 但是在.jsx文件中,ref 在模板中不會自動解包,所以需要使用.value
<!-- .vue -->
<el-input v-model="queryParams.pageNumber" />
<el-form model="queryParams" :inline="true">...</el-form>

<!-- .jsx -->
<el-input v-model={queryParams.value.pageNumber} />
<el-form model={queryParams.value} inline={true}>...</el-form>

事件修飾符

  • 想使用事件修飾符可以把 v-model 改為一個數(shù)組,事件修飾符需要以數(shù)組的形式傳遞
  • 如果需要傳遞參數(shù),需要在數(shù)組第二個參數(shù)中以字符串形式傳遞
  • 推薦:可以使用 _ 來分割事件修飾符,GitHub 里沒有特殊聲明,但是 Babel Plugin JSX for Vue 3.0 源碼里做了判斷,可以參考: parseDirectives.ts#L52-L61
<!-- .vue -->
<el-input v-model.trim={ queryParams.name } />

<!-- .jsx -->
<el-input v-model={ [queryParams.value.name, ['trim'] } />
<!-- 或 -->
<el-input v-model_trim={ refVal.value } />

自定義指令

如下示例為:添加 .event 事件修飾符并傳遞 arg 參數(shù),直接打印 binding 效果如下:

image-20220901105132150

<!-- .vue -->
<el-button
  v-hasPermission:arg.event="['xxx:add']"
  type="primary"
  plain
  icon="Plus"
  @click="handleAdd"
>
  新增
</el-button>

<!-- .jsx -->
<el-button
  v-hasPermission={[['xxx:add'], 'arg', ['event']]}
  type='primary'
  plain
  icon="Plus"
  onClick={handleAdd}
>
  新增
</el-button>

v-for

v-for 無法直接使用,需要使用 map 去實現(xiàn)循環(huán)遍歷渲染

<!-- .vue -->
<h1 v-for="item in list" :key="item">{{item}}</h1>

<!-- .jsx -->
<script>
{list.value.map(item => (
  <h1>{item}</h1>
))}
</script>

注意:

  • 如果遍歷時需要判斷每一項其是否顯示,不能使用v-if,需要使用三元運(yùn)算符
  • v-forv-if不能一起使用
<!-- .vue -->
<template v-for="col in columns">
  <el-table-column
    v-if="col.visible"
    :key="col.key"
    :label="col.label"
    :prop="col.field"
  />
</template>

<!-- .jsx -->
{columns.value.map(col =>
  col.visible ? (
    <el-table-column
      key={col.id}
      label={col.label}
      prop={col.field}
    />
  ) : null
)}

v-on

v-on 無法直接使用,需要使用原生綁定事件的方式去實現(xiàn)(@ -> on,之后進(jìn)行駝峰)

<!-- .vue -->
<el-button @click="handleQuery">搜索</el-button>

<!-- .jsx -->
<el-button onClick={handleQuery}>搜索</el-button>

系統(tǒng)按鍵修飾符不能通過 .xxx 形式書寫,需要自己進(jìn)行判斷,比如如下示例是按回車時進(jìn)行搜索

這里順便說一下 style,由于里面是 : 形式表示,需要改為對象形式書寫

<!-- .vue -->
<el-input
  v-model.trim="queryParams.number"
  clearable
  style="width: 180px"
  @keyup.enter="handleQuery"
/>

<!-- .jsx -->
<el-input
  v-model_trim={queryParams.value.number}
  clearable
  style={{ width: '180px' }}
  onKeyup={e => e.code === 'Enter' && handleQuery()}
/>

插槽

在 jsx 中,應(yīng)該使用 v-slots 代替 v-slot,且插槽需要是函數(shù)式組件

<!-- .vue -->
<el-dialog
  v-model="configOpen"
  title="彈出框"
  append-to-body
  >
  <template #footer>
    <div class="dialog-footer">
      <el-button @click="configOpen = false">取 消</el-button>
    </div>
  </template>
</el-dialog>

<!-- .jsx -->
<el-dialog
  v-model={configOpen.value}
  title='彈出框'
  append-to-body
  v-slots={{
    footer: () => (
      <div class='dialog-footer'>
        <el-button
          onClick={() => {
            configOpen.value = false
          }}
        >
          取 消
        </el-button>
      </div>
    )
  }}
  >
  <!-- ... -->
</el-dialog>

到此這篇關(guān)于vue3中使用jsx開發(fā)的文章就介紹到這了,更多相關(guān)vue3使用jsx內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Vue3頁面如何自適應(yīng)表格滾動高度

    詳解Vue3頁面如何自適應(yīng)表格滾動高度

    這篇文章主要為大家詳細(xì)介紹了Vue3頁面如何自適應(yīng)表格滾動高度,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • Vue實現(xiàn)視頻播放vue-video-player、dplayer方式

    Vue實現(xiàn)視頻播放vue-video-player、dplayer方式

    這篇文章主要介紹了Vue實現(xiàn)視頻播放vue-video-player、dplayer方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • 探索Vue如何高效構(gòu)建可復(fù)用組件

    探索Vue如何高效構(gòu)建可復(fù)用組件

    Vue.js作為現(xiàn)代前端開發(fā)中的佼佼者,其組件系統(tǒng)是構(gòu)建高效、靈活和可擴(kuò)展用戶界面的關(guān)鍵,本文帶大家深度探索?Vue.js?組件的核心奧義,感興趣的小伙伴可以了解下
    2024-12-12
  • vue父子組件相互通信方法示例梳理總結(jié)

    vue父子組件相互通信方法示例梳理總結(jié)

    這篇文章主要為大家介紹了vue父子組件相互通信方式示例梳理總結(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Vue實現(xiàn)數(shù)字動畫的幾種方案

    Vue實現(xiàn)數(shù)字動畫的幾種方案

    本文介紹了三種使用Vue實現(xiàn)動態(tài)數(shù)字動畫的方案:使用Vue的響應(yīng)式數(shù)據(jù)與`setInterval`逐步更新數(shù)字,通過Vue的動畫API和CSS動畫效果為數(shù)字增加過渡效果,以及使用更高效的`requestAnimationFrame`來提供更加流暢的動畫表現(xiàn),每種方案都詳細(xì)說明了原理、實現(xiàn)步驟和代碼示例
    2025-02-02
  • vue3+vite中使用vuex的具體步驟

    vue3+vite中使用vuex的具體步驟

    在vue3+vite創(chuàng)建的項目中使用vuex,要注意的是vite有部分寫法和之前的webpack是不同的,這篇文章主要介紹了vue3+vite中使用vuex的具體步驟,需要的朋友可以參考下
    2022-11-11
  • 基于vue與element實現(xiàn)創(chuàng)建試卷相關(guān)功能(實例代碼)

    基于vue與element實現(xiàn)創(chuàng)建試卷相關(guān)功能(實例代碼)

    這篇文章主要介紹了基于vue與element實現(xiàn)創(chuàng)建試卷相關(guān)功能,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Vite+Electron快速構(gòu)建VUE3桌面應(yīng)用的實現(xiàn)

    Vite+Electron快速構(gòu)建VUE3桌面應(yīng)用的實現(xiàn)

    本文主要介紹了Vite+Electron快速構(gòu)建VUE3桌面應(yīng)用的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • vue element實現(xiàn)表格合并行數(shù)據(jù)

    vue element實現(xiàn)表格合并行數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了vue element實現(xiàn)表格合并行數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • Vue 如何向集合的頭部添加元素

    Vue 如何向集合的頭部添加元素

    在 Vue 中,如果要向集合的頭部添加元素,可以使用 JavaScript 的 unshift 方法或 Vue 的 $set 方法,本文給大家介紹Vue 向集合的頭部添加元素的方法,感興趣的朋友一起看看吧
    2023-12-12

最新評論

贵定县| 西青区| 永州市| 星子县| 封丘县| 全椒县| 西华县| 布尔津县| 襄城县| 钟山县| 扬州市| 马边| 浦东新区| 南乐县| 通化市| 永春县| 双鸭山市| 宁德市| 会理县| 蒙自县| 益阳市| 祁阳县| 平凉市| 永寿县| 阜康市| 青冈县| 谷城县| 新晃| 镇远县| 吉木乃县| 宁化县| 仁布县| 富锦市| 高密市| 石台县| 炎陵县| 东源县| 囊谦县| 五台县| 西乌| 湟源县|