Vue 3无渲染组件核心是只写逻辑不写DOM,通过作用域插槽暴露状态与方法:template仅含slot并传递:data、:loading、:fetch等属性;script setup中用ref/reactive管理状态、computed派生值、onMounted处理副作用;插槽数据命名语义明确如:isPending/:error;父组件自由定制UI结构与样式。

Vue 3 单文件组件实现无渲染组件,核心是“只写逻辑、不写 DOM”,把所有 UI 渲染权交给父组件,靠作用域插槽传递状态与方法。
模板部分:只保留 ,不写任何标签
template 中不能出现 div、button、span 等实际元素,仅用
- 必须写成
<slot :data="list" :loading="isLoading" :fetch="loadMore" />或带闭合标签形式 - 避免空 template 或遗漏 slot,否则组件无法输出内容,调用方拿不到任何东西
- 不使用 v-if/v-for 等指令控制渲染逻辑——那属于父组件职责
脚本部分:专注响应式状态与行为封装
使用 <script setup> 时,重点管理内部逻辑,不操作 DOM:
递归分析 Vue 项目组件依赖,从入口文件生成组件层级图,支持 Vue 2/3,输出组件名、文件路径和属性。适用于分析组件结构、排查依赖或了解项目架构。
- 用
ref或reactive定义 loading、error、data 等状态 - 用
computed暴露派生值(如canSubmit、filteredItems) - 用
onMounted/onUnmounted处理副作用(如定时器、事件监听) - 方法统一封装为函数并暴露,例如
submit()、reset()、validate()
插槽暴露:结构清晰、语义明确
传递给
立即学习“前端免费学习笔记(深入)”;
- 推荐用
:isPending而非:isLoading,避免和 CSS 类名或其它状态混淆 - 错误信息用
:error,而不是:errorMessage,保持命名一致性 - 可组合多个能力,如
:formState="state"+:handlers="{ submit, reset }",减少解构层级
父组件调用:自由定制 UI,不依赖预设结构
接收插槽数据后,可任意组合 HTML、第三方组件或 Tailwind 类名:
- 支持用
v-slot="{ data, isPending, fetch }"解构使用 - 可嵌套 Element Plus 表格、Ant Design 卡片,也可渲染为小程序兼容结构
- 样式完全由父组件控制,天然规避 class 冲突和主题侵入

















