一、React 项目基础架构(目录结构)
以下是一套兼顾模块化、可维护性、可扩展性的通用目录结构,适用于中大型 React 项目,我会标注每个目录的核心作用:
plaintext
your-react-app/
├── public/ # 静态资源(不会被webpack处理)
│ ├── favicon.ico # 网站图标
│ ├── index.html # 根HTML文件(挂载React应用)
│ └── robots.txt # 搜索引擎爬虫配置
├── src/ # 核心源码目录
│ ├── api/ # 接口请求相关
│ │ ├── index.js # 接口请求封装(如axios实例)
│ │ └── modules/ # 按业务模块拆分接口(如userApi.js、orderApi.js)
│ ├── assets/ # 静态资源(会被webpack处理,如图片、样式、字体)
│ │ ├── images/ # 图片资源
│ │ ├── styles/ # 全局样式(如reset.css、theme.css)
│ │ └── fonts/ # 字体文件
│ ├── components/ # 通用公共组件(全局复用)
│ │ ├── Button/ # 组件目录(组件名大写,单文件/多文件均可)
│ │ │ ├── index.jsx # 组件逻辑
│ │ │ └── index.css # 组件样式
│ │ ├── Card/
│ │ └── index.js # 公共组件导出(方便批量引入)
│ ├── hooks/ # 自定义Hooks(复用业务逻辑)
│ │ ├── useRequest.js # 封装请求Hook
│ │ ├── useAuth.js # 封装权限Hook
│ │ └── index.js # 自定义Hook导出
│ ├── layouts/ # 布局组件(如侧边栏+头部的后台布局)
│ │ ├── MainLayout.jsx # 主布局
│ │ └── EmptyLayout.jsx # 空白布局(如登录页)
│ ├── pages/ # 页面级组件(按业务模块拆分)
│ │ ├── Home/ # 首页
│ │ │ ├── index.jsx
│ │ │ └── index.css
│ │ ├── User/ # 用户模块
│ │ │ ├── List.jsx # 用户列表页
│ │ │ ├── Detail.jsx # 用户详情页
│ │ │ └── index.css
│ ├── router/ # 路由配置
│ │ ├── index.js # 路由入口(注册路由、路由守卫)
│ │ └── routes.js # 路由规则列表(便于管理)
│ ├── store/ # 状态管理
│ │ ├── index.js # store入口(创建store)
│ │ └── modules/ # 按模块拆分状态(如user.js、cart.js)
│ ├── utils/ # 工具函数(通用方法)
│ │ ├── format.js # 格式化工具(时间、金额)
│ │ ├── storage.js # 本地存储封装(localStorage/sessionStorage)
│ │ └── index.js # 工具函数导出
│ ├── App.jsx # 根组件
│ ├── index.jsx # 应用入口(渲染根组件)
│ └── config.js # 全局配置(如接口域名、环境变量)
├── .env.development # 开发环境变量
├── .env.production # 生产环境变量
├── package.json # 依赖配置
└── README.md # 项目说明
二、核心技术选型(新手友好 + 主流)
1. 项目搭建工具
- Create React App (CRA) :官方推荐,零配置快速搭建,适合新手入门。
- Vite:新一代构建工具,启动 / 热更新速度极快,中大型项目推荐(React+Vite 配置简单)。
2. 路由管理
-
react-router-dom (v6+) :React 官方路由库,v6 简化了 API,更易上手,核心功能:
- 声明式路由配置(
BrowserRouter/Routes/Route); - 路由跳转(
useNavigate)、参数获取(useParams/useSearchParams); - 路由守卫(通过高阶组件 / 自定义 Hook 实现)。
- 声明式路由配置(
3. 状态管理
根据项目规模选择,避免过度设计:
-
小型项目:React 内置
useState+useContext,无需额外库,足够满足需求; -
中大型项目:
- Redux Toolkit (RTK) :Redux 官方推荐的简化版,内置
createSlice/createAsyncThunk,减少样板代码; - Zustand:轻量级状态管理,API 极简(无需 Provider 嵌套),新手友好,适合替代复杂的 Redux;
- MobX:响应式状态管理,学习成本低,适合快速开发。
- Redux Toolkit (RTK) :Redux 官方推荐的简化版,内置
4. 样式方案(按需选择)
- CSS Modules:内置在 CRA/Vite 中,解决样式作用域问题,新手易上手;
- Styled-components:CSS-in-JS 方案,组件化样式,支持动态样式;
- Tailwind CSS:原子化 CSS 框架,快速搭建 UI,减少自定义样式编写。
5. 接口请求
-
Axios:通用 HTTP 请求库,封装拦截器(请求 / 响应)、统一处理错误、设置基础域名,示例:
javascript
运行
// src/api/index.js import axios from 'axios'; import { ElMessage } from 'element-plus'; // 可选:UI库提示组件 import { getToken } from '../utils/storage'; // 创建axios实例 const service = axios.create({ baseURL: process.env.REACT_APP_API_BASE_URL, // 环境变量中的接口域名 timeout: 10000, }); // 请求拦截器:添加token service.interceptors.request.use( (config) => { const token = getToken(); if (token) { config.headers.Authorization = `Bearer ${token}`; } return config; }, (error) => Promise.reject(error) ); // 响应拦截器:统一处理错误 service.interceptors.response.use( (response) => response.data, // 直接返回数据体 (error) => { ElMessage.error(error.response?.data?.msg || '请求失败'); return Promise.reject(error); } ); export default service;
6. UI 组件库(可选)
- Ant Design:企业级 UI 库,组件丰富,适合后台系统;
- Element Plus (React 版) :轻量易用,适合快速开发;
- Chakra UI:无障碍、可定制化,适合面向用户的产品。
三、架构设计原则(新手必看)
- 单一职责:一个组件 / 函数只做一件事(如公共组件只负责 UI 展示,业务逻辑抽离到 Hook);
- 分层解耦:UI 层(组件)、逻辑层(Hook)、数据层(API/Store)分离,避免组件臃肿;
- 复用优先:通用逻辑抽离为自定义 Hook(如
useRequest处理请求加载 / 错误),通用 UI 抽离为公共组件; - 环境隔离:通过
.env文件区分开发 / 生产环境,避免硬编码域名、密钥等; - 渐进式扩展:小型项目先简化架构(如不用 Redux,只用 Context),后续根据需求扩展。
总结
- 目录结构:核心遵循「按功能拆分」(api/components/pages/store 等),保证模块化和可维护性;
- 技术选型:新手优先用 CRA/Vite + react-router-dom v6 + Axios,状态管理根据项目规模选 Context/RTK/Zustand;
- 设计原则:坚持单一职责、分层解耦,优先复用,渐进式扩展,避免过度设计。
这套架构既符合行业主流实践,又兼顾新手的学习成本,你可以根据实际项目(如小型官网 / 中大型后台)灵活调整目录和技术选型。