一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務(wù)器之家 - 編程語(yǔ)言 - JavaScript - vue.js - vue3中輕松實(shí)現(xiàn)switch功能組件的全過(guò)程

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

2021-12-28 17:27春去春又來(lái) vue.js

這篇文章主要給大家介紹了關(guān)于vue3中輕松實(shí)現(xiàn)switch功能組件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

what

編程語(yǔ)言里面,除了使用 if 語(yǔ)句來(lái)做條件判斷,還有另外一個(gè)常用的就是 switch 了。

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

這篇文章就是來(lái)探索這個(gè)問(wèn)題,并且最終實(shí)現(xiàn)一個(gè) Switch 組件

以終為始

先來(lái)看看我們希望用戶(hù)是如何使用 Switch 的

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

用 js 的方式來(lái)對(duì)比一下:

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

用戶(hù)可以通過(guò)一個(gè) VSwitch 組件來(lái)應(yīng)用 switch 功能

通過(guò) case 來(lái)確定匹配的條件

然后每一個(gè) case 匹配的條件用 template 來(lái)表示

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

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

how

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

我們先來(lái)思考一下 switch 的功能

拆分 Switch 功能

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

舉個(gè)栗子:

case = "xiaohong" 時(shí)

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

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

如果沒(méi)有匹配到任何一個(gè) case ,并且還有 defalut 插槽時(shí),顯示 defalut 插槽

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

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

實(shí)現(xiàn)原理

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

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

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

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

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

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

只需要這樣

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

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

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

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

那當(dāng)明白上述知識(shí)點(diǎn)后,我們?cè)诨貋?lái)看看第一個(gè)功能

是不是只要我們把和 case 匹配的 slots 渲染出來(lái)即可

看代碼:

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

注意哦,一定要加條件判斷,因?yàn)楹苡锌赡苁菦](méi)有對(duì)應(yīng)的 slot 的

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

我們?cè)趤?lái)看第二個(gè)功能的時(shí)候是不是也很簡(jiǎ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"]();
   }
  };
 },
};

如果在第一個(gè)條件那沒(méi)有匹配到的話(huà),肯定會(huì)到達(dá)第二個(gè)條件判斷,也就是 if (slots["default"])

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

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

總結(jié)

讓我們來(lái)總結(jié)總結(jié)你已經(jīng)學(xué)到了哪些知識(shí)點(diǎn)

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

如果你學(xué)到的話(huà),那么請(qǐng)用你的小手點(diǎn)個(gè)贊唄~~~

完整代碼

// 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>

擴(kuò)展思考

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

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

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

原文鏈接:https://juejin.cn/post/6914198729482305550

延伸 · 閱讀

精彩推薦
  • vue.js用vite搭建vue3應(yīng)用的實(shí)現(xiàn)方法

    用vite搭建vue3應(yīng)用的實(shí)現(xiàn)方法

    這篇文章主要介紹了用vite搭建vue3應(yīng)用的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下...

    Asiter7912022-01-22
  • vue.jsVue中引入svg圖標(biāo)的兩種方式

    Vue中引入svg圖標(biāo)的兩種方式

    這篇文章主要給大家介紹了關(guān)于Vue中引入svg圖標(biāo)的兩種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的...

    十里不故夢(mèng)10222021-12-31
  • vue.jsVue2.x 項(xiàng)目性能優(yōu)化之代碼優(yōu)化的實(shí)現(xiàn)

    Vue2.x 項(xiàng)目性能優(yōu)化之代碼優(yōu)化的實(shí)現(xiàn)

    這篇文章主要介紹了Vue2.x 項(xiàng)目性能優(yōu)化之代碼優(yōu)化的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋...

    優(yōu)小U9632022-02-21
  • vue.jsVue多選列表組件深入詳解

    Vue多選列表組件深入詳解

    這篇文章主要介紹了Vue多選列表組件深入詳解,這個(gè)是vue的基本組件,有需要的同學(xué)可以研究下...

    yukiwu6752022-01-25
  • vue.jsVue項(xiàng)目中實(shí)現(xiàn)帶參跳轉(zhuǎn)功能

    Vue項(xiàng)目中實(shí)現(xiàn)帶參跳轉(zhuǎn)功能

    最近做了一個(gè)手機(jī)端系統(tǒng),其中遇到了父頁(yè)面需要攜帶參數(shù)跳轉(zhuǎn)至子頁(yè)面的問(wèn)題,現(xiàn)已解決,下面分享一下實(shí)現(xiàn)過(guò)程,感興趣的朋友一起看看吧...

    YiluRen丶4302022-03-03
  • vue.js詳解vue 表單綁定與組件

    詳解vue 表單綁定與組件

    這篇文章主要介紹了vue 表單綁定與組件的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下...

    Latteitcjz6432022-02-12
  • vue.js梳理一下vue中的生命周期

    梳理一下vue中的生命周期

    看過(guò)很多人講vue的生命周期,但總是被繞的云里霧里,尤其是自學(xué)的同學(xué),可能js的基礎(chǔ)也不是太牢固,聽(tīng)起來(lái)更是吃力,那我就已個(gè)人之淺見(jiàn),以大白話(huà)...

    CRMEB技術(shù)團(tuán)隊(duì)7992021-12-22
  • vue.jsVue2.x-使用防抖以及節(jié)流的示例

    Vue2.x-使用防抖以及節(jié)流的示例

    這篇文章主要介紹了Vue2.x-使用防抖以及節(jié)流的示例,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下...

    Kyara6372022-01-25
主站蜘蛛池模板: 好男人天堂网 | 亚洲国产日韩成人综合天堂 | 500福利第一巨人导航 | 久久综合亚洲色hezyo | 色综合中文字幕在线亚洲 | 欧美日韩中文国产一区二区三区 | 99热er| 日本海鸣馆 | 天天射寡妇射 | 极品奶妈漫画 | 四虎影院在线 | 第一次做m被调教经历 | 亚洲国产影院 | 图片专区小说专区卡通动漫 | 给我一个黄色网址 | 欧美男男gaygaysxxx | 欧美黑人性 | 亚洲第一男人网站 | 色综合天天综合网看在线影院 | 办公室的秘密在线观看 | 边摸边操| 精品AV亚洲乱码一区二区 | 羞羞答答影院在线 | 亚洲国产精品嫩草影院久久 | 糖心vlog网页版 | 日本视频高清免费观看xxx | 亚洲福利天堂网福利在线观看 | 欧美一级h | 情人梁家辉在线 | 成人免费淫片95视频观看网站 | 国产精品自产拍在线观看2019 | 貂蝉沦为姓奴小说 | 91夜夜操| 九色PORNY真实丨国产大胸 | 天天快乐在线观看 | 边摸边吃奶玩乳尖视频 | 好男人资源免费播放 | 98成人| 国产伦精品一区二区三区免费迷 | 国产99re在线观看69热 | 99视频都是精品热在线播放 |