React + TypeScript 项目的完整工程规范,涵盖项目结构、组件设计、Hooks、路由、状态管理、API 层、错误处理、测试和性能优化。当用户在 React 项目中创建、修改组件或模块,涉及架构设计、代码编写时自动激活。
适用于使用 React + TypeScript 的仓库。
以下为中大型 React 项目的业界最佳实践结构,按项目实际情况裁剪:
src/
├── app/ # 应用入口与全局配置
│ ├── App.tsx # 根组件(Provider 组合)
│ ├── routes.tsx # 路由配置
│ └── providers.tsx # 全局 Provider 组装
│
├── pages/ # 页面组件(与路由一一对应)
│ ├── Dashboard/
│ │ ├── DashboardPage.tsx
│ │ ├── components/ # 页面私有组件
│ │ └── hooks/ # 页面私有 hooks
│ ├── UserList/
│ └── Settings/
│
├── layouts/ # 布局组件
│ ├── MainLayout.tsx # 主布局(侧边栏 + 顶栏 + 内容区)
│ ├── AuthLayout.tsx # 登录/注册页布局
│ └── BlankLayout.tsx # 空白布局(错误页等)
│
├── features/ # 功能模块(按业务领域划分)
│ ├── auth/
│ │ ├── components/ # 模块组件
│ │ ├── hooks/ # 模块 hooks
│ │ ├── api.ts # 模块 API 调用
│ │ ├── types.ts # 模块类型定义
│ │ ├── constants.ts # 模块常量
│ │ └── index.ts # 模块公开导出
│ └── order/
│
├── components/ # 全局共享 UI 组件
│ ├── Button/
│ │ ├── Button.tsx
│ │ ├── Button.module.css
│ │ └── tests/
│ ├── Modal/
│ ├── Form/
│ └── ErrorBoundary/
│
├── hooks/ # 全局共享 hooks
│ ├── useAuth.ts
│ ├── useDebounce.ts
│ └── useMediaQuery.ts
│
├── services/ # API 基础层
│ ├── request.ts # Axios/fetch 实例与拦截器
│ └── endpoints/ # API 端点定义(如按领域拆分)
│
├── stores/ # 全局状态管理
│ ├── authStore.ts
│ └── uiStore.ts
│
├── locales/ # 国际化语言包
│ ├── zh-CN.json # 中文
│ ├── en-US.json # 英文
│ └── index.ts # i18n 实例初始化(i18next / react-intl)
│
├── assets/ # 静态资源
│ ├── images/ # 图片(PNG、JPG、WebP)
│ ├── icons/ # SVG 图标
│ └── fonts/ # 自定义字体
│
├── config/ # 应用配置
│ ├── env.ts # 环境变量类型化封装
│ └── features.ts # Feature Flags 管理
│
├── types/ # 全局共享类型
│ ├── api.ts # API 响应/请求通用类型
│ ├── models.ts # 业务实体类型
│ └── global.d.ts # 全局类型扩展(图片模块声明等)
│
├── utils/ # 纯工具函数
│ ├── format.ts # 日期、数字、货币格式化
│ ├── validators.ts # 表单校验规则
│ └── storage.ts # LocalStorage / SessionStorage 封装
│
├── styles/ # 全局样式与主题
│ ├── global.css # 全局基础样式(reset / normalize)
│ ├── variables.css # CSS 变量(颜色、间距、字号)
│ ├── breakpoints.ts # 响应式断点常量
│ └── themes/ # 主题定义
│ ├── light.css # 亮色主题变量
│ ├── dark.css # 暗色主题变量
│ └── index.ts # 主题切换逻辑
│
└── constants/ # 全局常量
├── routes.ts # 路由路径常量
└── config.ts # 业务常量(分页大小、超时时间等)
ComponentName/
├── ComponentName.tsx
├── ComponentName.types.ts # 类型定义(如需独立)
├── ComponentName.module.css # 样式(如需)
├── hooks/
│ └── useComponentLogic.ts
├── components/
│ └── SubComponent.tsx
└── tests/
└── ComponentName.spec.tsx
页面组件 (Pages) → 路由映射、布局组合
└── 容器组件 (Containers) → 数据获取、状态编排
└── 业务组件 (Features) → 领域逻辑展示
└── 通用组件 (UI) → 纯展示,无业务耦合
tsx
interface TableProps
data: T[];
columns: ColumnDef
onRowClick?: (row: T) => void;
}
tsx
function useUserList(params: QueryParams) {
const [data, setData] = useState
const [loading, setLoading] = useState(false);
const [error, setError] = useState
const fetch = useCallback(async () => {
setLoading(true);
setError(null);
try {
const res = await getUserList(params);
setData(res.list);
} catch (e) {
setError(e as Error);
} finally {
setLoading(false);
}
}, [params]);
useEffect(() => { fetch(); }, [fetch]);
return { data, loading, error, refetch: fetch };
}
tsx
// app/routes.tsx
const routes: RouteObject[] = [
{
path: /,
element:
children: [
{ index: true, element
该技能支持在以下平台通过对话安装:
帮我安装 SkillHub 和 react-project-standard-1775994670 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 react-project-standard-1775994670 技能
skillhub install react-project-standard-1775994670
文件大小: 6.62 KB | 发布时间: 2026-4-13 11:44