react基本架构推荐

3 阅读4分钟

一、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:响应式状态管理,学习成本低,适合快速开发。

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:无障碍、可定制化,适合面向用户的产品。

三、架构设计原则(新手必看)

  1. 单一职责:一个组件 / 函数只做一件事(如公共组件只负责 UI 展示,业务逻辑抽离到 Hook);
  2. 分层解耦:UI 层(组件)、逻辑层(Hook)、数据层(API/Store)分离,避免组件臃肿;
  3. 复用优先:通用逻辑抽离为自定义 Hook(如useRequest处理请求加载 / 错误),通用 UI 抽离为公共组件;
  4. 环境隔离:通过.env文件区分开发 / 生产环境,避免硬编码域名、密钥等;
  5. 渐进式扩展:小型项目先简化架构(如不用 Redux,只用 Context),后续根据需求扩展。

总结

  1. 目录结构:核心遵循「按功能拆分」(api/components/pages/store 等),保证模块化和可维护性;
  2. 技术选型:新手优先用 CRA/Vite + react-router-dom v6 + Axios,状态管理根据项目规模选 Context/RTK/Zustand;
  3. 设计原则:坚持单一职责、分层解耦,优先复用,渐进式扩展,避免过度设计。

这套架构既符合行业主流实践,又兼顾新手的学习成本,你可以根据实际项目(如小型官网 / 中大型后台)灵活调整目录和技术选型。