亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用vue3怎么實現一個switch功能組件

發布時間:2021-01-08 16:24:21 來源:億速云 閱讀:288 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關利用vue3怎么實現一個switch功能組件,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

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

利用vue3怎么實現一個switch功能組件

用 js 的方式來對比一下:

利用vue3怎么實現一個switch功能組件

用戶可以通過一個 VSwitch 組件來應用 switch 功能

通過 case 來確定匹配的條件

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

這樣我們已經規定好用戶該如何使用了,剩下的其實就是實現了

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

how

那么我們應該如何實現呢?

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

拆分 Switch 功能

某個等于 case 值的那個模板顯示,別的都不應該顯示

舉個栗子:

case = "xiaohong" 時

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

利用vue3怎么實現一個switch功能組件

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

利用vue3怎么實現一個switch功能組件

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

實現原理

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

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

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

如果打印 slots 的話,你會發現可以得到一個對象,而 key 的值就是 slot 的名稱,而 value 是一個函數,調用這個函數就可以獲取到對應的 vnode。

利用vue3怎么實現一個switch功能組件

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

只需要這樣

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

setup 除了可以返回一個對象,作為導出給 template 用的數據,還可以直接返回一個函數作為 render。

而 render 函數只要返回對應的 vnode ,那么最終就會被渲染到 view 上。

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

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

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

看代碼:

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

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

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

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

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

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 的話,那么就返回即可

至此,你已經實現了一個簡單的 Switch 功能組件了

總結

讓我們來總結總結你已經學到了哪些知識點

  • 設計組件時,先設計該組件的規則(接口)

  • tasking 的思想,把大功能拆小,然后逐一擊破

  • 在 vue3 中獲取 slots 的方式

  • setup 不止可以返回對象,還可以返回一個函數,效果同 render 函數一樣

  • render 函數返回的 vnode 最終會被渲染到 view 上

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

完整代碼

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

關于利用vue3怎么實現一個switch功能組件就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临朐县| 芒康县| 岳西县| 崇左市| 思南县| 荔波县| 延津县| 稻城县| 绩溪县| 乐亭县| 绿春县| 泰来县| 白河县| 咸丰县| 留坝县| 巢湖市| 绥宁县| 乌鲁木齐县| 翁源县| 永靖县| 双辽市| 湘乡市| 井研县| 柞水县| 马公市| 九龙城区| 永嘉县| 高安市| 阆中市| 汉源县| 桑植县| 罗源县| 敦化市| 镇赉县| 交城县| 乌苏市| 水城县| 东乡县| 怀柔区| 黑水县| 武夷山市|