# Cursor Rules for Outfit Web Project ## 项目概述 这是一个基于 React 19 + TypeScript + Vite + Tailwind CSS 的前端项目,使用 shadcn/ui 组件库,包含自动生成的 API 客户端。 ## 技术栈 - **前端框架**: React 19 - **语言**: TypeScript - **构建工具**: Vite - **样式**: Tailwind CSS 4.x - **UI 组件库**: shadcn/ui (基于 Radix UI) - **图标库**: Lucide React - **工具库**: class-variance-authority, clsx, tailwind-merge - **HTTP 客户端**: Axios - **API 生成**: openapi-typescript-codegen ## 代码规范 ### TypeScript 规范 - 使用严格的 TypeScript 配置 - 优先使用类型推断,但为公共 API 和复杂对象显式定义类型 - 使用 `interface` 定义对象类型,使用 `type` 定义联合类型和工具类型 - 避免使用 `any`,优先使用 `unknown` 或具体类型 - 使用泛型提高代码复用性 ### React 组件规范 - 使用函数组件和 React Hooks - 组件名使用 PascalCase - 文件名与组件名保持一致 - 使用 TypeScript 为 props 定义接口 - 优先使用 `useState` 和 `useEffect` 等内置 Hooks - 自定义 Hooks 以 `use` 开头 ### shadcn/ui 组件库规范 - 使用 shadcn/ui 作为主要 UI 组件库 - 组件配置使用 "new-york" 风格 - 组件放在 `src/components/ui/` 目录 - 使用 `@/components/ui` 别名导入 UI 组件 - 使用 `@/lib/utils` 导入工具函数 - 图标使用 Lucide React 库 - 遵循 shadcn/ui 的设计原则和可访问性标准 - 组件引入、升级、修复请统一使用 `npx shadcn@latest add [component]`,确保与 Tailwind v4、React 19 兼容 - 组件样式、主题、变量配置统一在 `components.json` 和 `tailwind.config.ts`/`tailwind.config.js` 中管理,Tailwind v4 下 `config` 字段应留空,主题色用 `baseColor`,如 `neutral`、`zinc` 等 - 推荐开启 `cssVariables: true`,用 CSS 变量做主题定制,支持暗色模式 - 组件样式冲突时可用 `prefix` 字段(如 `tw-`)隔离 Tailwind 工具类 - 组件样式入口通过 `tailwind.css`/`globals.css` 引入 - 组件变体、条件样式统一用 `class-variance-authority`、`clsx`、`tailwind-merge` 组合 - 推荐使用 `cn()` 工具函数(`clsx`+`tailwind-merge`)合并类名,避免冲突 - 组件开发/迁移时优先用函数组件,类型用 `React.ComponentProps` 推断,避免 `forwardRef`,如需 `ref` 用 `data-slot` 辅助样式 - 组件升级/迁移时注意 Tailwind v4 新特性(如 `size-*` 替换 `w-* h-*`) - 组件主题色、动画、变量扩展统一用 `cssVars` 和 `theme.extend`,如需自定义色彩/动画,参考官方 registry item 配置 - 组件可访问性(a11y)严格遵循 shadcn/ui 官方标准,确保键盘可用、aria 属性齐全、对比度达标 - 组件 peerDependencies 必须支持 React 19,升级依赖时如遇 npm ERESOLVE,优先用 `--force` 或 `--legacy-peer-deps` 解决 - 组件升级后如有 breaking change,需同步更新相关用法和文档 ### 样式规范 - 使用 Tailwind CSS 类名 - 使用 `clsx` 和 `tailwind-merge` 进行条件样式组合 - 使用 `class-variance-authority` 创建变体组件 - 避免内联样式,优先使用 Tailwind 类名 - 响应式设计使用 Tailwind 的断点前缀 - 使用 CSS 变量进行主题定制(baseColor: neutral) ### 文件组织 - 组件放在 `src/components/` 目录 - UI 组件放在 `src/components/ui/` 目录 - 页面组件放在 `src/pages/` 目录 - 工具函数放在 `src/lib/` 目录 - 自定义 Hooks 放在 `src/hooks/` 目录 - API 相关代码在 `src/api/` 目录(自动生成) - 类型定义放在 `src/types/` 目录 ### 导入规范 - 使用绝对路径导入(`@/` 别名) - 按以下顺序组织导入: 1. React 相关 2. 第三方库 3. shadcn/ui 组件 4. 内部组件/工具 5. 类型定义 6. 样式文件 ### API 使用规范 - 使用自动生成的 API 客户端 - 在组件中使用 `useApi` Hook 进行 API 调用 - 处理加载状态和错误状态 - 使用 TypeScript 类型确保类型安全 ### 命名规范 - 变量和函数使用 camelCase - 常量使用 UPPER_SNAKE_CASE - 组件使用 PascalCase - 文件使用 kebab-case 或 PascalCase(组件文件) - 类型和接口使用 PascalCase ### 代码质量 - 使用 ESLint 进行代码检查 - 遵循 React Hooks 规则 - 避免不必要的重新渲染 - 使用 React.memo 优化性能 - 正确处理副作用和清理 ### 开发工作流 - 使用 `npm run dev` 启动开发服务器 - 使用 `npm run build` 构建生产版本 - 使用 `npm run generate-api` 重新生成 API 客户端 - 使用 `npm run lint` 检查代码质量 - 使用 `npx shadcn@latest add [component]` 添加新组件 ## 最佳实践 ### shadcn/ui 使用最佳实践 - 优先使用 shadcn/ui 提供的组件,避免重复造轮子 - 使用 `cn()` 工具函数组合类名 - 遵循 shadcn/ui 的可访问性标准 - 使用 `class-variance-authority` 创建组件变体 - 保持组件的可组合性和可扩展性 ### 状态管理 - 对于简单状态,使用 `useState` - 对于复杂状态,考虑使用 `useReducer` - 避免过度使用全局状态 ### 性能优化 - 使用 React.memo 包装纯组件 - 使用 useCallback 和 useMemo 优化回调函数和计算值 - 懒加载路由和组件 - 优化图片和资源加载 ### 错误处理 - 使用 Error Boundaries 捕获组件错误 - 为 API 调用添加适当的错误处理 - 提供用户友好的错误信息 ### 可访问性 - 使用语义化的 HTML 标签 - 添加适当的 ARIA 属性 - 确保键盘导航支持 - 提供足够的颜色对比度 - 遵循 shadcn/ui 的可访问性指南 ## 注意事项 - API 客户端是自动生成的,不要手动修改 - 使用 Tailwind CSS 4.x 的新特性 - 遵循 React 19 的最佳实践 - 保持代码简洁和可维护性 - shadcn/ui 组件是可定制的,可以根据需要修改 - 使用 CSS 变量进行主题定制,支持暗色模式