- 我现在需要确认 TabsDemo.vue 中引用的 Tabs 组件里的两个子组件的类型


先展示内容看看
- 我们可以在 Tabs 组件用以下代码获取外面传给我们的子内容(获取插槽内容)
const defaults = context.slots.default()

- 如何展示内容呢?
- 用以下代码即可在页面中展示获取的内容
<component :is="defaults[0]"/>
<component :is="defaults[1]"/>

- 展示内容如下

如何检查子组件类型
- 用
defaults[下标].type === 组件名
即可
- 先 import 引入需要判断的组件,然后再判断



能判断子组件类型后,现在就可以检查子组件类型了
<script lang="ts">
import Tab from './Tab.vue'
export default {
setup(props,context){
const defaults = context.slots.default()
defaults.forEach((tag)=>{
if(tag.type !== Tab){
throw new Error('Tabs子标签必须是Tab')
}
})
return {defaults}
}
}
</script>
- 报错了,因为第一个标签是
<div>

- 同时,因为上面报错了,下面的 return 代码就不会执行,会说 defaults 为 undefined

- 这样做有一个好处,如果开发者代码错了,就直接不运行了。
总结
- 获取插槽内容
const defaults = context.slots.default()
- 判断子组件的类型
defaults[下标].type === 组件名
- 向我们展示了一个 Vue 的原理:每一个组件,例如Tab.vue,最终会导出一个对象,因为判断子组件类型代码显示
defaults[下标].type
与Tab
是全等的,打印出前者是一个对象。