在vue3做tabs切换功能的时候,如果导入的组件不适用shallowRef包裹会显示下面的警告:
- Home.vue?t=1708401434509:43 [Vue warn]: Vue received a Component that was made a reactive object. This can lead to unnecessary performance overhead and should be avoided by marking the component with `markRaw` or using `shallowRef` instead of `ref`.
- Component that was made reactive: {__hmrId: '2afd162d', __file: 'D:/v3code/my-big-charts/src/components/Comp7.vue', render: ƒ}
- at <Home onVnodeUnmounted=fn
ref=Ref< Proxy(Object) {__v_skip: true} > > - at <RouterView>
- at <App>
根据提示代码修改如下:
- import {ref,reactive,readonly,computed,watch,watchEffect,markRaw,shallowRef} from 'vue'
- import Comp7 from '../components/Comp7.vue'
- import Comp6 from '../components/Comp6.vue'
- const activeComp = shallowRef(Comp6)
- const tab = reactive([{
- name: "A组件",
- comName: shallowRef(Comp6)
- }, {
- name: "B组件",
- comName: shallowRef(Comp7
- }])
- const change = index=>{
- activeComp.value = tab[index].comName
- }
- <template>
- <ul>
- <li v-for="(item,index) in tab" :key="item.name" @click="change(index)">{{ item.name }}li>
- ul>
- <div>
- <component :is="activeComp">component>
- div>
- template>
就能解决上面的问题。