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

Vue3 cli-service项目导入带插槽组件时出现"Slot \"default\" invoked outside of the render function"警告

警告触发原因

  • Vue 3 中插槽本质是返回 VNode 的函数,只有在渲染函数执行过程中调用插槽函数时,才会将插槽内的响应式依赖绑定到正确的渲染上下文,完成依赖追踪。
    你当前的代码在setup顶层预先执行h函数生成了 VNode 数组,再让插槽函数直接返回提前生成好的静态 VNode,相当于插槽内容的生成脱离了插槽调用时的渲染上下文,若插槽内部用到响应式数据,更新时 Vue 无法完成依赖追踪,因此抛出该警告。

解决方法

将 VNode 的生成逻辑移到插槽函数内部,保证每次插槽被调用时才动态生成 VNode 即可,修改后的Composite组件代码如下:

// src/components/Composite.js
import { defineComponent, h } from "vue";
import Tabpane from "./Tabpane.vue";

export default defineComponent({
  name: "Composite",
  setup() {
    return () => h(Tabpane, {}, () => [
      h("div", { caption: "I am div 1" }, ["Div 1"]),
      h("div", { caption: "I am div 2" }, ["Div 2"])
    ]);
  }
});

如果插槽内容需要逻辑封装,也可以将 VNode 生成逻辑封装为独立函数,在插槽函数内调用即可,不要在setup顶层预先执行h生成静态 VNode。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:45:03