在寫 vue 組件的時候,如何能保證其中嵌套的子組件符合我們的預期?
例如封裝一個切換 tab 的組件,分為兩個部分:外容器 tabs 和 單組件 tab,那么如何保證用戶在使用過程中, tabs 里面包裹的使我們想要的 tab 組件,而不是其他例如 div 標簽等?
如下圖,新建一個頁面,引入 tabs 和 tab 組件:
那我們如何知道 tabs 里面的子元素類型?
首先我們在 tabs 源文件中,我們可以拿到 tabs 的 slots 內容,也是就引用時的子元素內容
將 slots 的內容打印出來:
這里面有一個極為重要的 default 函數,我們將他的執行結果打印出來:
打印結果是一個長度為三的數組,並且數組第一項的 type 為 div,那么這個數組是否就是 tabs 中的子元素呢?
我們在 tabs 源文件中引入 tab,比較一下數組中后面兩個元素的 type 是否是 tab:
打印結果:
現在我們可以得出結論:
在 vue3 中可以通過 context.slots.default() 得到組件中的子元素,如果要檢驗子元素的類型,只需要在拿到 default 返回的列表之后進行遍歷就可以啦: