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

如何使用Vue的h()渲染函数渲染组件子内容

在Vue中用h函数渲染传入的子内容

要渲染父组件传入的子内容,你需要在组件中访问插槽(slots),并把插槽内容作为h()函数的子节点参数传入。以下是具体实现方式:

方式1:通过setup上下文获取slots

直接在setup函数的第二个参数中解构出slots对象,然后在h()的第三个参数里传入默认插槽的内容:

<script lang="ts">
import { h } from 'vue';

export default {
  setup (props, { slots }) {
    // 渲染默认插槽内容,没传内容时用空数组兜底
    return () => h('div', {}, slots.default?.() || []);
  }
};
</script>

如果想保留原组件的文本内容,同时添加子内容,把文本和插槽内容合并成数组即可:

<script lang="ts">
import { h } from 'vue';

export default {
  setup (props, { slots }) {
    return () => h('div', {}, [
      'This is a test',
      ...(slots.default?.() || [])
    ]);
  }
};
</script>

方式2:使用useSlots钩子(Composition API风格)

如果你偏好更灵活的Composition API写法,可以用useSlots()钩子获取插槽内容:

<script lang="ts">
import { h, useSlots } from 'vue';

export default {
  setup () {
    const slots = useSlots();
    return () => h('div', {}, slots.default?.() || []);
  }
};
</script>

原理说明

父组件在<Test>标签内写的子内容,会被Vue自动收集到组件的**默认插槽(default slot)**中。通过slots.default()可以获取到这些子内容的VNode数组,把它作为h()函数的第三个参数(子节点位置),就能将传入的子内容渲染出来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:07:18