vue3 中如何检查子组件的类型

在写 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 返回的列表之后进行遍历就可以啦:

 

 

posted @ 2020-09-25 17:15  小船二  阅读(861)  评论(0编辑  收藏  举报