<template>
<div class="content">
<div class="tab">
<div v-for="(item, index) in data" :key="index" @click="switchCom(item)">
{{ item.name }}
</div>
</div>
<component :is="current.comName"></component>
</div>
</template>
<script setup lang="ts">
import { reactive, markRaw, } from 'vue';
import A from './Tab/A.vue'
import B from './Tab/B.vue'
import C from './Tab/C.vue';
type Tabs = {
name: string,
comName: any,
}
type Com = Pick<Tabs, 'comName'>
const data = reactive<Tabs[]>([
{ name: '我是A组件', comName: markRaw(A) },
{ name: '我是B组件', comName: markRaw(B) },
{ name: '我是C组件', comName: markRaw(C) },
])
let current = reactive<Com>({
comName: data[0].comName
})
const switchCom = (item: Tabs) => {
current.comName = item.comName
}
</script>
<style lang="less" scoped>
.tab {
display: flex;
.active {
background: skyblue;
color: #fff;
}
div {
margin: 0 20px;
}
}
</style>