# 前端实现自检清单 > 开发者在编写前端代码前后自检使用。确保组件结构合理、样式一致、状态完整、 > 可访问且可测试。分为"实现前"(PRE)和"实现后"(POST)两部分。 > 全部通过后方可提交代码评审。 --- ## 使用说明 1. **PRE** 项在开始写组件前检查; 2. **POST** 项在完成编码和所有验证命令后检查; 3. 对"不通过"项必须在代码评审前修复; 4. 无法满足的项标记 `[N/A: <原因>]`。 --- ## 实现前(PRE — Pre-Implementation) ### 1. 上下文完备性 | # | 检查项 | 通过 | 不通过 | N/A | 备注 | | ----- | ------------------------------------------------------------------ | ---- | ------ | --- | ---- | | PRE-1 | 已确定项目框架(React / Vue / Svelte / SolidJS / Angular) | ☐ | ☐ | ☐ | | | PRE-2 | 已确定样式方案(Tailwind / CSS Modules / styled-components / ...) | ☐ | ☐ | ☐ | | | PRE-3 | 已读取至少 3 个同模块的现有文件(UI 工作同类组件),理解命名、结构和样式模式(共享 brownfield 规则,规范出处:`.octopus/skills/review-code/SKILL.md` §"Greenfield vs. Brownfield") | ☐ | ☐ | ☐ | | | PRE-4 | 已确认路由模式(file-based / config-based)和新组件路由位置 | ☐ | ☐ | ☐ | | | PRE-5 | 已确认项目使用的 UI 基础库(Kobalte / Radix / Headless UI / ...) | ☐ | ☐ | ☐ | | | PRE-6 | 若项目有设计系统(token / theme / spacing),已确认取值方式 | ☐ | ☐ | ☐ | | | PRE-7 | Pipeline 模式:已读取设计文档的组件设计、接口设计、NFR 章节(DAG 路由:设计输入解析自冻结 DAG 副本 `{epic-slug}/dag` 节点规格 + 跨 session 边契约,见 `implementation.md` 使用说明第 5 条) | ☐ | ☐ | ☐ | | ### 2. 组件边界 | # | 检查项 | 通过 | 不通过 | N/A | 备注 | | ----- | --------------------------------------------------------------- | ---- | ------ | --- | ---- | | PRE-8 | 组件职责单一——一个组件只做一件事 | ☐ | ☐ | ☐ | | | PRE-9 | Props 类型已列出(TypeScript 接口 / PropTypes / defineProps) | ☐ | ☐ | ☐ | | | PRE-10| 所有需要的 UI 状态已识别:loading / empty / error / success / edge | ☐ | ☐ | ☐ | | --- ## 实现后(POST — Post-Implementation) ### 3. 组件结构 | # | 检查项 | 通过 | 不通过 | N/A | 备注 | | ------ | ----------------------------------------------------------- | ---- | ------ | --- | ---- | | POST-1 | 组件命名清晰、遵循项目约定(PascalCase / kebab-case) | ☐ | ☐ | ☐ | | | POST-2 | 所有 Props 有完整类型,无 `any` 类型 | ☐ | ☐ | ☐ | | | POST-3 | 组件文件结构符合项目约定(单文件 / 目录+index / co-located) | ☐ | ☐ | ☐ | | | POST-4 | 无巨型组件(> 200 行)——必要时已拆分为子组件 | ☐ | ☐ | ☐ | | | POST-5 | 事件处理器和回调遵循项目命名规范(`on*` / `handle*`) | ☐ | ☐ | ☐ | | ### 4. 样式与设计系统 | # | 检查项 | 通过 | 不通过 | N/A | 备注 | | ------ | -------------------------------------------------------------- | ---- | ------ | --- | ---- | | POST-6 | 使用项目统一的样式方案,未引入新的样式库 | ☐ | ☐ | ☐ | | | POST-7 | 若使用 Tailwind:无冗余类名堆积,复杂样式已提取为 `@apply` 或组件 | ☐ | ☐ | ☐ | | | POST-8 | 响应式断点已处理(移动端/平板/桌面),无横向溢出 | ☐ | ☐ | ☐ | | | POST-9 | 若项目有暗色模式:组件在亮/暗主题下均可正常显示 | ☐ | ☐ | ☐ | | | POST-10| 使用项目设计 token(颜色/间距/字体),无硬编码魔法数值 | ☐ | ☐ | ☐ | | | POST-11| 动画/过渡遵循项目约定(`motion` / CSS transition / ...),无突兀跳动 | ☐ | ☐ | ☐ | | ### 5. 状态覆盖 | # | 检查项 | 通过 | 不通过 | N/A | 备注 | | ------ | ----------------------------------------------------------------| ---- | ------ | --- | ---- | | POST-12| **Loading 状态**:数据加载时有骨架屏/加载指示器,布局不跳动 | ☐ | ☐ | ☐ | | | POST-13| **Empty 状态**:无数据时有友好提示和操作引导(非空白页) | ☐ | ☐ | ☐ | | | POST-14| **Error 状态**:请求失败时显示错误信息和重试/恢复操作 | ☐ | ☐ | ☐ | | | POST-15| **Edge cases**:超长文本截断、特殊字符、空数组、`null`/`undefined` 值均已处理 | ☐ | ☐ | ☐ | | | POST-16| 数据更新后 UI 正确反映最新状态(无过期数据残留) | ☐ | ☐ | ☐ | | ### 6. 可访问性(a11y) | # | 检查项 | 通过 | 不通过 | N/A | 备注 | | ------ | ------------------------------------------------------------------- | ---- | ------ | --- | ---- | | POST-17| 使用语义化 HTML 元素(`