Vue3动态组件<component>渲染失效原因分析
在Vue2中伪代码如下:
<template> <component :is="currentActiveTab.component" ref="componentRef" :key="currentActiveTab.key" :current-active-tab="currentActiveTab" v-bind="currentActiveTab" /> </template> <script> import A from './components/A' import B from './components/B' import C from './components/C' export default { components: { A, B, C }, data() { return { tabList: [ { name: '概览视图', key: 'all', component: 'OverviewGraph' } ], activetab: 'all', } }, computed: { currentActiveTab() { return this.tabList.find((v) => v.key === this.activetab) } } } </script>
迁移到Vue3中代码如下:
<template> <component :is="currentActiveTab.component" ref="componentRef" :key="currentActiveTab.key" :current-active-tab="currentActiveTab" v-bind="currentActiveTab" /> </template> <script setup lang="ts"> import { ref, onMounted, computed, nextTick } from 'vue' import A from './components/A.vue' import B from './components/B.vue' import C from './components/C.vue' const tabList = ref([ { name: '概览视图', key: 'all', component: 'OverviewGraph' } ]) const activetab = ref('all') const currentActiveTab = computed(() => { return tabList.value.find((v) => v.key === activetab.value) }) </script>
Vue3渲染出来是酱紫的:
只有一个壳子,没有任何内容。
问题出在组件的名字上了:在 <script setup>
中要使用动态组件时,需要直接用 :is="Component"
直接绑定到组件本身,而不是字符串的组件名。 也就是需要把'OverviewGraph'
改成OverviewGraph
即可。 修改后的代码如下:
<template> <component :is="currentActiveTab.component" ref="componentRef" :key="currentActiveTab.key" :current-active-tab="currentActiveTab" v-bind="currentActiveTab" /> </template> <script setup lang="ts"> import { ref, onMounted, computed, nextTick } from 'vue' import A from './components/A.vue' import B from './components/B.vue' import C from './components/C.vue' const tabList = ref([ { name: '概览视图', key: 'all', component: OverviewGraph // 改了这里 } ]) const activetab = ref('all') const currentActiveTab = computed(() => { return tabList.value.find((v) => v.key === activetab.value) }) </script>
到此这篇关于Vue3动态组件<component>渲染失效原因分析的文章就介绍到这了,更多相关Vue3 component渲染失效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
vue element-plus中el-input修改边框border的方法
element样式还是蛮好的,只是有时候我们需要做一些调整,比如el-input的边框,下面这篇文章主要给大家介绍了关于vue element-plus中el-input修改边框border的相关资料,需要的朋友可以参考下2022-09-09vue+elementUI实现动态合并数据相同的单元格(可指定合并列)
这篇文章主要介绍了vue+elementUI如何实现动态合并数据相同的单元格,文中有详细的代码实例供大家参考,具有一定的参考价值,需要的朋友可以参考下2023-07-07Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
这篇文章主要介绍了Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下2019-05-05
最新评论