React Generate Skill
⚠️ 重要:本 Skill 严格依赖 frontend-request-skill
本 Skill 不重新发明请求层。所有 HTTP / 错误处理 / 鉴权相关代码必须复用 frontend-request-skill 的标准实现:
| react-init-skill 输出 | 对应 frontend-request-skill 标准 |
|---|---|
src/api/request.ts | references/frontend-spec.md(fetch 标准实现) |
src/services/auth.service.ts | references/auth-patterns.md(Token 刷新队列) |
src/utils/{error,toast,auth}.ts | references/error-handling.md + auth-patterns.md |
src/config/{api,error}.config.ts | references/frontend-spec.md(BASE_URL + ERROR_CODE_MAP) |
src/hooks/useAuth.ts | references/auth-patterns.md |
响应信封 { code, message, data } | 与 各 init-skill 内置的统一响应规范 一致 |
接入本 Skill 前,请先阅读 frontend-request-skill 的 SKILL.md 与核心 reference。
Overview
This skill transforms a vague React project idea into a production-ready React 18 + TypeScript SPA with consistent architecture, design tokens, static assets, and coding standards.
- Pre-development: brainstorm, scope, and produce a detailed specification.
- Project initialization: scaffold the project, directory structure, CLAUDE.md, AGENTS.md, tsconfig.json, vite.config.ts.
- Development: install frontend-request-skill's request layer, set up theme system, design the layout, and build core pages.
- Post-development: lint, type-check (tsc --noEmit), verify the build.
When to Use
Invoke this skill when the user asks for:
- "帮我做一个 React 项目"
- "初始化一个 React + TypeScript 模板"
- "做一个 React 后台管理系统"
- "用 React 搭一个 xxx 网站"
- "帮我生成一个标准的 React 项目结构"
- Any request that involves creating a new React SPA from scratch (H5 / 后台 / 文档站)
Not for: React Native / 小程序 / Taro / 移动端 hybrid — use react-native-init-skill instead.
Workflow Summary
Phase 1: Pre-development → Ask 3-5 clarifying questions → Write spec.md (scope, pages, data model, API outline) Phase 2: Project Initialization → npm create vite@latest scaffold → Replace placeholders → Create standard directory structure (including src/api/, src/services/, src/config/) → Generate CLAUDE.md (≤ 50 lines, references frontend-request-skill) → Generate AGENTS.md (≤ 400 lines, on-demand references) → Apply tsconfig.json strict template → Apply vite.config.ts template (path alias + auto-import) → Copy code-examples/ (types / stores / components / pages) Phase 3: Development → Install frontend-request-skill's request layer (copy from references/) → Configure src/config/api.config.ts (BASE_URL / PREFIX / SUCCESS_CODES) → Configure src/config/error.config.ts (ERROR_CODE_MAP) → Set up src/styles/globals.css theme variables → Implement core pages using code-examples/ as template → Write hooks (useAuth, useFetch, ...) Phase 4: Post-development → npm run lint # ESLint must pass → npm run type-check # tsc --noEmit must pass → npm run build # Must build successfully → Summarize deliverables
Phase 1: Pre-development
1.1 Brainstorming Questions
Ask 3-5 focused questions:
- "这个项目解决什么问题?核心目标用户是谁?"
- "主要功能有哪些?请列出 3-5 个核心页面或核心流程。"
- "你倾向哪种视觉风格?清新健康 / 极简工具 / 活泼社区 / 商务数据?"
- "UI 库偏好?Ant Design / Material UI / Chakra UI / Radix UI / 自研?"
- "是否需要登录、权限、用户系统?"
1.2 Write spec.md
Create spec.md with:
markdown# {{PROJECT_NAME}} 项目规格说明 ## 1. 项目定位 - 产品名称: - 目标用户: - 核心价值: - 对标产品: ## 2. 核心功能 1. ... 2. ... 3. ... ## 3. 页面清单 | 页面 | 路径 | 说明 | |------|------|------| | 首页/Dashboard | src/pages/Dashboard.tsx | ... | ## 4. 数据模型 - User: { id, username, nickname, avatar, role, tenantId, createdAt } - ... ## 5. API 轮廓 - POST /api/auth/login → { token, refreshToken, user } - GET /api/users → { items, total } - ... ## 6. 设计风格 - 风格:极简工具 / 商务数据 / ... - 主色:#10b981 - UI 库:Ant Design 5.x - 是否深色:否
Phase 2: Project Initialization
2.1 Create the React Project
bashnpm create vite@latest {{project-name}} -- --template react-ts cd {{project-name}} npm install # 状态管理 npm install zustand # UI 库(Ant Design 默认) npm install antd @ant-design/icons # 路由 npm install react-router-dom # 工具 npm install -D @types/node
2.2 Apply tsconfig.json (STRICT MODE)
必须按 references/tsconfig-template.md 完整配置:
jsonc{ "compilerOptions": { "target": "ES2020", "useDefineForClassFields": true, "lib": ["ES2020", "DOM", "DOM.Iterable"], "module": "ESNext", "skipLibCheck": true, "moduleResolution": "bundler", "allowImportingTsExtensions": true, "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, "noFallthroughCasesInSwitch": true, "baseUrl": ".", "paths": { "@/*": ["src/*"] } }, "include": ["src"], "references": [{ "path": "./tsconfig.node.json" }] }
2.3 Apply vite.config.ts
按 references/vite-config-template.md 完整配置:
typescriptimport { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; import { fileURLToPath, URL } from 'node:url'; export default defineConfig({ plugins: [react()], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)), }, }, });
2.4 Create Standard Directory Structure
按 references/project-structure.md 创建完整目录。关键目录:
src/ ├── api/ # 必须按 frontend-request-skill 划分 │ ├── request.ts │ ├── upload.ts │ ├── sse.ts (按需) │ └── modules/ ├── services/ │ └── auth.service.ts ├── config/ │ ├── api.config.ts │ └── error.config.ts ├── stores/ # Zustand Store │ ├── userStore.ts │ └── appStore.ts ├── hooks/ # useAuth, useFetch 等 ├── pages/ # 页面(不是 views) ├── components/ # 组件 ├── types/ # ApiResponse<T> / RequestError ├── utils/ # auth.ts / error.ts / toast.ts └── styles/ # 全局样式
2.5 Install frontend-request-skill's Request Layer
严格按 references/api-integration.md 复制以下文件:
| 目标文件 | 来源 | 必须 |
|---|---|---|
src/api/request.ts | references/api-integration.md § 3 | ✅ |
src/services/auth.service.ts | references/api-integration.md § 4 | ✅ |
src/utils/auth.ts | references/api-integration.md § 5 | ✅ |
src/utils/error.ts | references/api-integration.md § 6 | ✅ |
src/utils/toast.ts | references/api-integration.md § 7 | ✅ |
src/hooks/useAuth.ts | references/api-integration.md § 8 | ✅ |
src/config/api.config.ts | references/api-integration.md § 2.2 | ✅ |
src/config/error.config.ts | references/api-integration.md § 2.2 | ✅ |
src/types/api.ts | references/code-examples/types/api.ts | ✅ |
src/types/user.ts | references/code-examples/types/user.ts | 按需 |
禁止:
- ❌ 自己写 request.ts(必须按标准复制)
- ❌ 在组件里直接调
localStorage(必须走utils/auth.ts) - ❌ 在组件里写 401 处理(必须交给
auth.service.ts)
2.6 Generate CLAUDE.md (≤ 50 lines)
必须用 references/claude-md-template.md 模板,强制 ≤ 50 行。
模板已包含:
- 显式声明依赖
frontend-request-skill - 9 条红线(含 fetch 标准、auth.service 收口)
- 完整的目录约定
2.7 Generate AGENTS.md (≤ 400 lines)
按 references/agents-md-template.md。按主题拆分章节,AI 按需查阅。
2.8 Copy Code Examples
从 references/code-examples/ 复制:
| 文件 | 必须 | 说明 |
|---|---|---|
types/api.ts | ✅ | 全局 API 类型 |
types/user.ts | 按需 | 业务类型(按项目实际调整) |
stores/userStore.ts | ✅ | 用户 store(含 token) |
stores/appStore.ts | ✅ | 全局 app 状态 |
components/AppLayout.tsx | ✅ | 全局布局 |
pages/Login.tsx | ✅ | 登录页 |
pages/UserManagement.tsx | ✅ | 列表/分页/CRUD 参考 |
Phase 3: Development
3.1 Set Up the Theme System
按 SKILL.md § 3.1 创建 src/styles/globals.css(CSS 变量或 Ant Design ConfigProvider)。
3.2 Implement Pages
参考 references/code-examples/pages/UserManagement.tsx 的结构:
typescriptimport { useState, useEffect } from 'react'; import type { User, UserListParams } from '@/types/user'; export function UserManagement() { const [loading, setLoading] = useState(false); const [tableData, setTableData] = useState<User[]>([]); // 业务方法(全部用 async/await + try/catch + unknown) async function loadData() { setLoading(true); try { const res = await userApi.list(query); setTableData(res.data.list); } catch (err: unknown) { if (err && typeof err === 'object' && 'code' in err) { showError(err); } } finally { setLoading(false); } } useEffect(() => { loadData(); }, []); }
3.3 Implement State Management
参考 references/code-examples/stores/userStore.ts:
- ✅ Zustand 风格
- ✅ 使用
create - ✅ 显式导出 store
- ✅ 提供 reset 方法
3.4 Shared Components(仅复用 ≥3 次)
参考 references/component-standards.md。
Phase 4: Post-development
4.1 Run Type Check(必须 0 error)
bashnpm run type-check # tsc --noEmit
红线:任何 .tsx / .ts 文件必须通过类型检查。
4.2 Run Lint(必须 0 error)
bashnpm run lint
4.3 Run Build
bashnpm run build # 自动先跑 type-check,再 vite build
4.4 Summarize Deliverables
提供:
- 项目结构概览
- 已生成文件清单
- 主题色 / UI 库选择
- type-check / lint / build 状态
- 与 frontend-request-skill 的对齐清单
Resources
本 Skill 包含以下参考资料:
| 文件 | 说明 |
|---|---|
references/project-structure.md | 标准目录结构(对齐 frontend-request-skill) |
references/claude-md-template.md | CLAUDE.md 模板(≤ 50 行) |
references/agents-md-template.md | AGENTS.md 模板(≤ 400 行,按主题) |
references/api-integration.md | 必读:与 frontend-request-skill 集成的完整指南 |
references/tsconfig-template.md | tsconfig.json 严格模式完整配置 |
references/vite-config-template.md | vite.config.ts 完整配置 |
references/react-conventions.md | React 18 + TS 编码约定 |
references/component-standards.md | 共享组件规范(3 次复用原则) |
references/code-examples/ | 完整代码示例:types / stores / components / pages |
外部依赖:
- frontend-request-skill — 请求层规范(必装)
Best Practices
- 复用 frontend-request-skill:不自己写 request.ts、不在组件里调 localStorage、不在组件里写 401 跳转。
- TypeScript 严格模式:
strict: true全开,提交前必须tsc --noEmit通过。 - CLAUDE.md ≤ 50 行:超出部分移到 AGENTS.md。
- CSS 变量优先:业务代码只用 CSS 变量,禁止裸色值。
- Ant Design 优先:能用的组件就用,不手写。
- 3 次复用原则:组件被复用 ≥3 次才抽到
src/components/。 - Hooks 提取逻辑:可复用的逻辑抽到
src/hooks/。 - 每个组件文件带
lang="ts":.tsx文件必须带类型。 - 请求层严格分层:
api/只管 HTTP /services/收口业务 /hooks/给组件用。 - 错误捕获用
unknown:不用any,必要时用类型守卫。 - 完成必跑 3 件套:
type-check+lint+build,全部 0 error。
Red Lines(绝不可违反)
- ❌ 不用 axios(必须 fetch)
- ❌ 不用
any类型 - ❌ 不用
console.log - ❌ 不用 class 组件(必须函数组件 + Hooks)
- ❌ 不用
.jsx(必须.tsx) - ❌ 不用裸色值
- ❌ 不手写 Ant Design 已有的组件
- ❌ 不在组件里直接调
localStorage - ❌ 不在组件里写 401 跳转
- ❌ 不用 ESLint 规则覆盖 TypeScript 检查
触发词
react-generate、React Generate Skill


