Loading...

文章背景图

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

2024-12-23
11
-
- 分钟
|

导言

在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>

根因分析 - TODO

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

评论交流

文章目录