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

vue3中輕松實現(xiàn)switch功能組件的全過程

 更新時間:2021年01月07日 09:35:16   作者:春去春又來  
這篇文章主要給大家介紹了關(guān)于vue3中輕松實現(xiàn)switch功能組件的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

what

編程語言里面,除了使用 if 語句來做條件判斷,還有另外一個常用的就是 switch 了。

而在 vue 中,官方已經(jīng)幫助我們實現(xiàn)了 v-if 這個指令,但是還沒有 switch ,那我們能不能自己實現(xiàn)一個呢?

這篇文章就是來探索這個問題,并且最終實現(xiàn)一個 Switch 組件

以終為始

先來看看我們希望用戶是如何使用 Switch 的

用 js 的方式來對比一下:

用戶可以通過一個 VSwitch 組件來應(yīng)用 switch 功能

通過 case 來確定匹配的條件

然后每一個 case 匹配的條件用 template 來表示

這樣我們已經(jīng)規(guī)定好用戶該如何使用了,剩下的其實就是實現(xiàn)了

這一步背后的思想就是確定組件的規(guī)格,也可以說是確定組件的使用接口

how

那么我們應(yīng)該如何實現(xiàn)呢?

我們先來思考一下 switch 的功能

拆分 Switch 功能

某個等于 case 值的那個模板顯示,別的都不應(yīng)該顯示

舉個栗子:

case = "xiaohong" 時

那么就只能顯示名字為 "xiaohong" 的插槽

如果沒有匹配到任何一個 case ,并且還有 defalut 插槽時,顯示 defalut 插槽

當(dāng)然,switch 還有更復(fù)雜的功能,我們這里先從最核心的功能入手,慢慢在復(fù)雜化(迭代思想)

實現(xiàn)原理

首先我們必須先知道該組件的 slots,都有哪些

在 vue3 中,我們只需要通過以下方式就可以輕松獲取 slots

setup(props,{slots}){
 console.log(slots)
}

如果打印 slots 的話,你會發(fā)現(xiàn)可以得到一個對象,而 key 的值就是 slot 的名稱,而 value 是一個函數(shù),調(diào)用這個函數(shù)就可以獲取到對應(yīng)的 vnode。

那比如我想顯示 xiaohei 這個插槽要怎么做呢?

只需要這樣

 setup(props, { slots }) {
  
  return () => {
   return slots.xiaohei()
  };
 },

setup 除了可以返回一個對象,作為導(dǎo)出給 template 用的數(shù)據(jù),還可以直接返回一個函數(shù)作為 render。

而 render 函數(shù)只要返回對應(yīng)的 vnode ,那么最終就會被渲染到 view 上。

所以按照上面代碼的寫法的話最終會顯示 xiaohei slot 內(nèi)部的內(nèi)容

那當(dāng)明白上述知識點后,我們在回來看看第一個功能

是不是只要我們把和 case 匹配的 slots 渲染出來即可

看代碼:

export default {
 props: ["case"],
 setup(props, { slots }) {
  console.log(slots);
  return () => {
   if (slots[props.case]) {
    return slots[props.case]();
   }
  };
 },
};

注意哦,一定要加條件判斷,因為很有可能是沒有對應(yīng)的 slot 的

看,懂了原理之后是不是很輕松的實現(xiàn)第一個功能了。

我們在來看第二個功能的時候是不是也很簡單了

只需要在加一段代碼即可:

export default {
 props: ["case"],
 setup(props, { slots }) {
  console.log(slots);
  return () => {
   if (slots[props.case]) {
    return slots[props.case]();
   }

   if (slots["default"]) {
    return slots["default"]();
   }
  };
 },
};

如果在第一個條件那沒有匹配到的話,肯定會到達第二個條件判斷,也就是 if (slots["default"])

接著就是如果有 default slot 的話,那么就返回即可

至此,你已經(jīng)實現(xiàn)了一個簡單的 Switch 功能組件了

總結(jié)

讓我們來總結(jié)總結(jié)你已經(jīng)學(xué)到了哪些知識點

  • 設(shè)計組件時,先設(shè)計該組件的規(guī)則(接口)
  • tasking 的思想,把大功能拆小,然后逐一擊破
  • 在 vue3 中獲取 slots 的方式
  • setup 不止可以返回對象,還可以返回一個函數(shù),效果同 render 函數(shù)一樣
  • render 函數(shù)返回的 vnode 最終會被渲染到 view 上

如果你學(xué)到的話,那么請用你的小手點個贊唄~~~

完整代碼

// VSwitch.vue
<script>
export default {
 props: ["case"],
 setup(props, { slots }) {
  return () => {
   if (slots[props.case]) {
    return slots[props.case]();
   }

   if (slots["default"]) {
    return slots["default"]();
   }
  };
 },
};
</script>

擴展思考

那其實這里實現(xiàn)的 switch 功能并不完整,如果說用戶匹配滿足多個條件呢?并且沒有 break,那么我們是不是應(yīng)該把匹配到的 template 都顯示出來呢?

自己嘗試一下實現(xiàn)看看?

到此這篇關(guān)于vue3中輕松實現(xiàn)switch功能組件的文章就介紹到這了,更多相關(guān)vue3實現(xiàn)switch功能組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue圖片懶加載的兩種方法詳解

    vue圖片懶加載的兩種方法詳解

    懶加載是一種網(wǎng)頁優(yōu)化技術(shù),也被稱為延遲加載,它的主要目的是在網(wǎng)頁加載時,只加載當(dāng)前可見區(qū)域內(nèi)的內(nèi)容,而延遲加載其他不可見區(qū)域的內(nèi)容,從而提高網(wǎng)頁的加載速度和性能,這篇文章主要介紹了vue圖片懶加載的兩種方法,需要的朋友可以參考下
    2023-07-07
  • vue搜索和vue模糊搜索代碼實例

    vue搜索和vue模糊搜索代碼實例

    這篇文章主要介紹了vue搜索和vue模糊搜索,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Vue3?封裝擴展并簡化Vuex在組件中的調(diào)用問題

    Vue3?封裝擴展并簡化Vuex在組件中的調(diào)用問題

    這篇文章主要介紹了Vue3?封裝擴展并簡化Vuex在組件中的調(diào)用,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • webpack+vue.js快速入門教程

    webpack+vue.js快速入門教程

    隨著前端的快速發(fā)展,非常多的js框架被應(yīng)用到項目中。Vue.js本身支持對組件的異步加載,配合Webpack的分塊打包功能,可以極其輕松地實現(xiàn)組件的異步按需加載。 這篇文章是webpack+vue.j的入門教程,有需要的可以參考借鑒。
    2016-10-10
  • Vue實現(xiàn)簡易跑馬燈效果

    Vue實現(xiàn)簡易跑馬燈效果

    這篇文章主要為大家詳細介紹了Vue實現(xiàn)簡易跑馬燈效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Vue項目配置在局域網(wǎng)下訪問方式

    Vue項目配置在局域網(wǎng)下訪問方式

    這篇文章主要介紹了Vue項目配置在局域網(wǎng)下訪問方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 淺析Vue如何巧用computed計算屬性

    淺析Vue如何巧用computed計算屬性

    在日常使用Vue開發(fā)項目的時候,計算屬性computed是一個非常常用的特性,本文就來分享一些使用Vue的computed計算屬性時的一些小技巧,希望能夠幫助到大家
    2023-06-06
  • Vue如何接入hls/m3u8的直播視頻詳解

    Vue如何接入hls/m3u8的直播視頻詳解

    項目中有一個需求,需要實現(xiàn)直播功能,后端接口返回的是m3u8數(shù)據(jù)流,下面這篇文章主要給大家介紹了關(guān)于Vue如何接入hls/m3u8直播視頻的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • vue通過elementUI組件實現(xiàn)圖片預(yù)覽效果

    vue通過elementUI組件實現(xiàn)圖片預(yù)覽效果

    我們在開發(fā)中經(jīng)常會遇到通過點擊某個按鈕或者文字實現(xiàn)圖片的預(yù)覽功能,這里我們分別介紹vue2和vue3里面如何實現(xiàn)圖片預(yù)覽方法,需要的朋友可以參考下
    2023-09-09
  • vue.js使用v-model實現(xiàn)表單元素(input) 雙向數(shù)據(jù)綁定功能示例

    vue.js使用v-model實現(xiàn)表單元素(input) 雙向數(shù)據(jù)綁定功能示例

    這篇文章主要介紹了vue.js使用v-model實現(xiàn)表單元素(input) 雙向數(shù)據(jù)綁定功能,結(jié)合完整實例形式分析了v-model實現(xiàn)表單input元素數(shù)據(jù)雙向綁定相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03

最新評論

虞城县| 石渠县| 新野县| 商都县| 亳州市| 萝北县| 宣城市| 综艺| 双城市| 上虞市| 柳林县| 观塘区| 峨眉山市| 阳泉市| 桑日县| 监利县| 栾城县| 同仁县| 英吉沙县| 马公市| 廊坊市| 临潭县| 揭阳市| 孟州市| 濉溪县| 秦安县| 原阳县| 旌德县| 宁乡县| 弋阳县| 宜川县| 斗六市| 平舆县| 蓝山县| 陕西省| 宁武县| 南昌县| 定南县| 佛冈县| 和静县| 武清区|