Vue3 steup中 动态组件component :is="xxx" 不能渲染的解决方案

Vue3 steup中 动态组件component :is="xxx" 不能渲染的解决方案

_

导言

在Vue2中可以使用 component :is="xxx" 进行动态渲染,在Vue3的选项式API中也可以直接执行动态渲染,在Vue3的组合式API中,却无法直接使用,如何解决呢?

探索

<script steup lang="ts">

import {onMounted} from 'vue';

import listPage from './views/listPage/index.vue';

let pageName = ref<string>(null);

const changePageName = (name) => {

 pageName.value = name;

};

onMounted(()=>{

  changePageName('listPage');

});

</script>

<template>

 <component :is="pageName">

</template>

问题

在上述的代码中,是无法直接进行渲染的,如果不是走组合式API的方法,也是可以直接进行渲染的。

解决方式 - 亲测可用

<script steup lang="ts">

import {onMounted,shallowReactive} from 'vue';

import listPage from './views/listPage/index.vue';

let pageName = ref<string>(null);

// 通过shallowReactive进行定义

shallowReactive({

  listPage

});

const changePageName = (name) => {

 pageName.value = name;

};

onMounted(()=>{

  changePageName('listPage');

});

</script>

<template>

 <component :is="pageName">

</template>

根因分析

为何用shallowReactive可以进行渲染,而不使用无法直接进行渲染呢?

网页实现滚动加载数据 - Vue/JavaScript 2024-12-07
MacOS如何查看MAC地址和IP地址 2026-02-02

评论区

© 2026 Louis前端大杂烩