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

如何动态更新通过h()创建的Vue组件的props?

如何动态更新通过h函数创建的Vue组件的Props

问题背景

我有一个非常简单的进度条组件:

<script setup lang="ts">
defineProps<{ progress: number }>();
</script>
<template>
    <div class="progress" role="progressbar" :aria-valuenow="progress" aria-valuemin="0" aria-valuemax="100">
        <div class="progress-bar" :style="{ 'width': progress + '%' }"></div>
    </div>
</template>

我需要将这类组件与其他组件整合到一个大容器中,因此使用h函数动态创建它们,代码如下:

import ResultProgressLine from './ResultProgressLine.vue';
import { h, ref, type VNode } from 'vue';

const contentRows = ref<VNode[]>([]);
const contentProgress: Map<number, VNode> = new Map();

// 创建组件
contentProgress.set(id, h(
    ResultProgressLine, {
        "progress": 0
    })
);
contentRows.value = contentRows.value.concat(contentProgress.get(id));

我通过以下方式挂载这些动态组件:

<component v-for="row, index in contentRows" :key="index" :is="row"></component>

现在的问题是:如何动态更新ResultProgressLine组件的progress props?

注意:<component>绑定的是异构组件,无法直接在这里传递ref。

已尝试的方案

  • 在h函数的props中传递Ref而非具体值
const progress = ref(0);
h(ResultProgressLine, { progress: progress });
  • 直接修改VNode的props属性
// 此方法近乎有效,但不会触发组件重新渲染,仅在下次全局渲染时更新
contentProgress.get(id)!.props.progress = 50;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:48:25