高质量 Vue 基础组件需控边界、明契约、保隔离,严格 PascalCase 命名与文件一致,原子化 Props 设计并配 validator,逻辑样式彻底隔离,提供 demo 和完整 API 文档。

写高质量、可复用的 Vue 单文件基础组件,核心不是堆功能,而是控边界、明契约、保隔离。重点在于让组件“只做一件事,且清楚怎么被用”。
命名与文件结构要严格一致
基础组件必须用 PascalCase 命名,文件名和组件 name 保持完全一致:
-
✅ 正确示例:
BaseButton.vue中name: 'BaseButton' -
❌ 避免情况: 文件叫
button.vue,但组件名写成MyBtn;或用连字符(base-button.vue)——这会让 IDE 补全失效、注册时大小写敏感出错 - 基础组件建议统一放在
src/components/base/目录下,便于识别和按需导入
Props 设计要原子化、可验证、有默认值
基础组件对外暴露的接口越简单清晰,复用性越高:
从零开始编排 SpringBoot+Vue 全栈项目工作流,适用于新建全栈项目或完整脚手架请求,触发后依次调用 product‑spec‑builder(需求调研)等模块。
- 每个 prop 只表达一个语义:比如
size(仅控制尺寸)、variant(仅控制样式变体),不合并成type这种模糊字段 - 必填 props 明确标注
required: true;可选 props 必须提供default,对象/数组用工厂函数:default: () => ({}) - 加
validator限制取值范围:size: { type: String, default: 'medium', validator: v => ['small', 'medium', 'large'].includes(v) } - 避免使用 HTML 或 Vue 保留名,如
class、style、modelValue(应通过v-model机制处理)
逻辑与样式必须彻底隔离
基础组件的生命线是“不依赖上下文”,任何业务逻辑、API 调用、路由跳转都不得出现在里面:
立即学习“前端免费学习笔记(深入)”;
- 模板中只用
v-bind和v-on,不写methods内联函数,所有行为通过emits向外抛事件(如'click'、'update:modelValue') - 样式必须加
scoped,类名前缀统一(如.base-button),不污染全局,也不依赖父级样式穿透 - 不引入
router、store、api等业务层模块;如有配置需求,通过 props 注入(例如iconMap对象)
提供最小可用 demo 和明确 API 文档
可复用 ≠ 自动可用,开发者需要立刻知道“怎么用、能传什么、会发什么”:
- 在组件同级建
BaseButton.demo.vue,展示所有 size / variant / loading 状态组合 - 在注释或配套
README.md中列出:- Props 表(含类型、是否必填、默认值、说明)
- Emits 列表(事件名、触发时机、携带参数)
- Slots 列表(
default、icon等具名插槽用途)
- 不写“详见源码”——别人不该为用一个按钮去读 200 行 setup 逻辑

















