You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建Vue3 <script setup>组件实例并通过<component>渲染?

实现Vue3组件实例化并动态渲染

你当前的写法无法直接实现,因为Vue3中用<script setup>编写的单文件组件(SFC)导入后是组件定义对象,不是可直接调用的构造函数,所以不能通过Message({message: "hello world"})这种方式创建"实例"。

以下是两种符合需求的实现方式:


方法一:封装高阶组件生成函数(匹配你的代码调用形式)

创建一个函数,接收props参数后返回一个新组件,该组件内部会渲染Message并传入指定的props。这样生成的组件可以直接通过<component :is>渲染:

<script setup lang="ts">
import { defineComponent, h } from 'vue';
import Message from './Message.vue';

// 定义生成带固定props的Message组件的函数
const createMessage = (props: { message: string }) => {
  return defineComponent({
    render() {
      return h(Message, props);
    }
  });
};

// 创建包含指定props的组件"实例"
const message1 = createMessage({ message: "hello world" });
</script>

<template>
  <component :is="message1" />
</template>

方法二:直接在动态组件中传递props(更简洁)

如果不需要预先创建独立的"实例"变量,也可以直接在动态组件上绑定props,写法更简单:

<script setup lang="ts">
import Message from './Message.vue';

const messageProps = { message: "hello world" };
</script>

<template>
  <component :is="Message" v-bind="messageProps" />
</template>

内容的提问来源于stack exchange,提问作者Lakshan Dissanayake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 15:37:48