组件契约文档的标准结构(可复制模板)

这节给你一份"组件契约模板"。它的写法重点不是把信息堆满,而是把争议点提前固定成条款。你们可以把它放进组件库站点、README、或直接放进设计稿旁边的说明区;只要团队默认"以契约为准",沟通成本会明显下降。

1)基本信息(让人快速定位)

  • 组件名 / 英文标识 :例如 Button / AppButton
  • 组件目标(一句话) :它解决什么问题,不解决什么问题
  • 适用场景 / 不适用场景:例如"用于提交/确认动作;不用于页面跳转(应使用 Link)"
  • 依赖与前置:是否依赖主题系统、国际化、表单框架、路由等

写法提示:目标要写"边界",别写口号。边界越清晰,越少被滥用。(Krug, 2014)

2)视觉与布局约束(设计最关心,但要写成可验收条款)

  • 尺寸与密度:size 列表(S/M/L)、高度、左右 padding 的区间
  • 层级与变体:primary/secondary/text/danger 等,哪些必须提供
  • 图标规则:leading/trailing icon 是否允许、大小、间距
  • 对齐规则:文本对齐、按钮组间距、换行策略
  • 主题与暗色模式:是否支持、失败时的降级策略

条款化例子(比"看起来差不多"更可判定):

  • "同一按钮在 S/M/L 三个尺寸下,高度固定为 28/32/36px(或按你们系统),文本基线居中。"
  • "danger 变体在 hover/focus/disabled 三态下都要有视觉区分,否则视为不合格。"

3)API 契约(研发最关心:输入、输出、默认值)

建议用表格写清楚,每一项都要回答:类型、是否必填、默认值、是否受控、与其他属性的联动

  • Props/Slots

    • value / modelValue:受控还是非受控?
    • defaultValue:只在首次生效还是每次都生效?
    • disabled / readonly:差异是什么?
  • Events/Callbacks

    • 触发时机:onChange 在输入中触发还是失焦触发?
    • 参数形状:回传值、错误对象、原生 event 是否暴露
  • Methods/Ref(如果有)

    • 是否提供 focus() / scrollIntoView()
  • A11y Props(可访问性)

    • 是否透传 aria-*,有哪些必填项(如 aria-label

写法提示:API 要写"互斥关系"和"优先级"。例如 disabled=true 时,onClick 是否还会触发?如果会触发,那测试与埋点都要跟着改。

4)状态机(测试和联调最需要:什么时候是什么状态)

这是减少扯皮的关键段落。用"状态 + 触发条件 + UI 表现 + 交互限制"写清。

建议最少覆盖:

  • default:默认态
  • hover / active / focus:交互态(含键盘 focus)
  • loading:加载态(是否可点击、是否展示 spinner、是否保留宽度防抖动)
  • disabled:禁用态(是否可聚焦、tooltip 是否可用)
  • error / warning / success:反馈态(尤其对表单类组件)
  • empty:空态(列表、下拉、表格常见)

推荐写成表格或小型状态图。状态越多,越要用"表格化表达"降低理解负担。(Miller, 1956)

5)边界条件与异常处理(最容易引发争论的一块)

把"极端情况怎么做"写成条款,避免每次都临时决定。常见边界包括:

  • 超长文本:截断/换行/tooltip 规则
  • 无数据 / null:展示什么文案,是否允许自定义
  • 慢请求:loading 延迟阈值(比如 >300ms 才显示 spinner,防闪烁)
  • 并发更新:最后一次写入优先还是队列处理
  • 错误呈现:红字、红框、toast、还是静默;是否可重试
  • 国际化:文字长度变化对布局的影响,是否允许两行

这段要写得"像判例"。你写得越具体,回归越省力。

6)一致性与可替换性(面向设计系统/组件库治理)

  • 与设计 Token 的关系:哪些颜色/圆角/间距必须来自 Token
  • 可替换约束:未来升级版本时,哪些 API 不能动(兼容承诺)
  • 弃用策略(Deprecation) :老属性何时废弃,如何提示迁移

这块能让组件库变成"可演进的产品",而不是一次性工程。(Gamma et al., 1994)

7)验收标准(Definition of Done)

把"验收"从口头变成清单:

  • 功能验收:列出必须通过的用例
  • 视觉验收:列出必须对齐的点(像素级还是容差范围)
  • 可访问性验收:键盘可操作、读屏标签、对比度要求
  • 性能验收:渲染耗时、列表虚拟化阈值(如适用)
  • 兼容性验收:浏览器/端侧范围

写法提示:验收标准要能被测试自动化部分覆盖,剩下才是人工 spot check。

8)测试建议与用例(让测试能直接抄)

  • 最小回归集(必须自动化的 5--10 条)
  • 关键交互用例(键盘、焦点、复制粘贴、拖拽如有)
  • 异常用例(超时、接口报错、空数据、权限不足)
  • 可视化回归建议(截图点位、状态覆盖)

这里建议引用"测试金字塔"的思想:单测覆盖逻辑、集成测覆盖组件行为、少量 e2e 覆盖关键链路。(Cohn, 2009)


一句话总结(给你放在模板顶部)

组件契约文档 = 视觉条款 + API 条款 + 状态机 + 边界判例 + 验收清单。

相关推荐
一次旅行2 小时前
飞书接入龙虾后失联解决方法
前端·人工智能·chrome·飞书
晴天162 小时前
【Electron】从零构建你的第一个桌面应用
前端·javascript·electron
AI周红伟2 小时前
周红伟:OpenClaw 企业级智能体架构与全栈实战
人工智能·微信·架构·云计算·腾讯云·openclaw
为爱停留2 小时前
引入大模型与 RAG:价格预测准确率提升与架构实践
架构
六月的可乐2 小时前
AI Agent:从零构建生产级AI智能体脚手架的架构思考
人工智能·ai·架构·langchain·前端框架·node.js·a
无忧智库2 小时前
从单体到云原生:解构大型供应链系统的微服务演进与多租户治理之道(PPT)
微服务·云原生·架构
斌味代码2 小时前
Vue3源码解读(一):响应式系统 reactive/ref 核心原理图解(2026最新版)
前端·javascript·vue.js
星辰_mya2 小时前
MVCC 与事务隔离:MySQL 如何实现“读不阻塞写”?
java·数据库·mysql·面试·架构
yhole3 小时前
Nginx解决前端跨域问题
运维·前端·nginx