UI組件庫-Tab組件(jsx)

其實一直想繞過jsx,原計劃是先在react里面帶大家用上jsx,vue里面就不涉及了。昨天經(jīng)過一番折騰,實在是在vue組件的<template>里面不能很滿意的實現(xiàn)想要的效果,其實我對自己和大家的要求不高,只是說咱們的代碼在完成其功能的前題下,要容易閱讀,易于理解。

在實現(xiàn)Tab組件的時候,我覺得自己不能達到這個要求,在參考了各種源碼后,終于還是決定在項目中使用jsx。

jsx的視頻已經(jīng)發(fā)給大家(也可以在react合集里面找到),雖然是在react的環(huán)境下但是區(qū)別不大,大家先看一下,掌握基本用法,后面用的多了,就沒有障礙了。

一、vue 項目引入 jsx 支持

這個官方文檔有詳細的說明,可以直接查閱,下面簡單記錄下

// 安裝依賴npm install @vue/babel-preset-jsx @vue/babel-helper-vue-jsx-merge-props --save-dev// 配置 babel,如果沒有就新建 .babelrc 文件{  "presets": ["@vue/babel-preset-jsx"]}

二、vue 組件的寫法的變化

一個 vue 組件,其中要求 <template> 標簽和 render() 方法二選一,在使用 render() 的時候,其實文件名都可以改為 .js 形如下面的樣子

// tabs.jsexport default {  data() {    return {}  },  mounted() {},  methods: {},  render(h) {}  ...}

但是,我們的 Tab 組件還是有一些樣式要考慮的,上面這樣的方式就不方便了,改為如下的形式:

// tabs.vue<script>export default {  data() {    return {}  },  mounted() {},  methods: {},  render(h) {}  ...}</script><style lang="sass" scoped></style>

這樣我們就兼顧了 render() 和我們的樣式

三、用 jsx 的方式實現(xiàn)我們之前的 tab組件結構

UI組件庫-Tab組件(jsx)

如上圖,這是我們改造前組件的 <template> 中的結構,現(xiàn)在修改成 jsx 的方式,如下圖

UI組件庫-Tab組件(jsx)

具體的實現(xiàn)過程,這里就不重復說了,分享的時候已經(jīng)很仔細的帶大家做了,這里要提醒大家注意的是 slots,children 還有 jsx 的各種寫法。

四、組件用法

組件完成后,我們就可以在需要的地方很簡便的使用了,因為是參考 Element 的 api,所以大家用起來也會比較自然

UI組件庫-Tab組件(jsx)

和 Element 的 tab 組件一樣,一個 v-model 指定被激活的 tab,<Tab> 組件的 label 屬性設置 tab 標簽上的文字,<Tab> 組件中的內容,就是 tab 標簽頁對應的主體內容,<Tab> 的 name 屬性用于區(qū)分不同的 tab。

上圖中的按鈕是我做的一個實驗,為了證明按鈕的事件可以被調用。

<Tab> 組件的內容沒有貼出來,很簡單,就是一個 li,按 Bulma 的要求寫就行。

END

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容