可扩展的 React 项目文件夹结构

简介: 强烈推荐!

<!DOCTYPE html>

在构建小型应用时,几乎任何结构都能跑得起来。但一旦项目开始增长——组件变多、业务逻辑复杂、接入 API、引入 state ——如果文件夹结构一开始没想清楚,很快就会陷入混乱。

在这篇文章中,我会分享一个我在 2025 年个人常用、并且非常认可的现代化、可扩展 React 文件夹结构。无论你是在做个人项目,还是打算扩展一个企业级应用,这套结构都能帮助你保持组织清晰、一致,并且心态稳定。


为什么文件夹结构这么重要

在开始之前,先问一句——为什么要在意这些?

因为一个干净的结构可以:

  • 让新成员(或者未来的你)更容易上手:明确职责边界(UI、逻辑、数据获取)。
  • 明确职责边界(UI、逻辑、数据获取):减少 bug 和重复代码。
  • 减少 bug 和重复代码:鼓励可扩展性和模块化。

结构设计(清晰、可扩展、对开发者友好)

以清晰度为核心构建

.
├── eslint.config.js
├── index.html
├── package.json
├── public
│ └── vite.svg
├── README.md
├── src
│ ├── App.css
│ ├── App.tsx
│ ├── assets # 图片,字体,图标等等
│ │ └── react.svg
│ ├── components # 可重复使用的纯 UI 组件
│ │ └── Button
│ │ ├── Button.module.css
│ │ ├── Button.test.ts
│ │ └── index.tsx
│ ├── features # 业务逻辑和特定功能相关
│ │ └── auth
│ │ ├── AuthPage.tsx
│ │ ├── components
│ │ ├── hooks
│ │ └── services
│ ├── hooks # 自定义 hooks
│ ├── layouts # 可重复调用的Layout封装(DashBoradLayout、AuthLayout)
│ ├── pages # 与路由结构保持一致(映射到routes)
│ ├── routes # 路由的集中配置(React Router)
│ ├── services # API调用
│ ├── store # 全局状态
│ ├── types # 类型定义
│ ├── utils # 工具函数、常量、帮助文件等
│ ├── config # 环境配置、主题、应用设置等等
│ ├── index.css
│ └── main.tsx
├── tsconfig.app.json
├── tsconfig.json
├── tsconfig.node.json
└── vite.config.ts

1. Components vs. Features

  • 使用 /components 存放 纯 UI 组件——无状态、可复用、跨应用使用(例如:Button、Input、Modal)。
  • 使用 /features 存放 业务逻辑和特定功能相关的文件。每个领域(如 auth 、 chat 、 profile )都有自己的文件夹,内部通常包含:
    • components/
    • services/
    • hooks/
    • pages/ 甚至可以有自己的 state( store/ )

这种方式可以让逻辑就近收敛,避免文件膨胀或混乱的全局 state。


2. Pages = Routes

让 /pages 文件夹与路由结构保持一致。

每一个 page 对应一个 route,内部可以自由引入 feature 模块或 layout。


3. 集中的 Services 层

API 调用不应该写在组件里。

使用 /services 文件夹来统一定义所有后端请求。例如:

export const login = (credentials) => axios.post('/login', credentials)

让 UI 专注于 UI。它应该在 /services/auth.js 。

这样当后端接口发生变化时,你只需要修改一个地方。


4. 全局 Store?只在真正需要时才用

不要从第一天就上全局 state。

优先把 state 保持在 feature 内部。只有当 state确实需要在距离很远的组件之间共享时,才考虑 Redux、Zustand 或 Context API。


5. Hooks:无痛复用逻辑

自定义 hooks 是救命稻草。

无论是 useAuth 、 useDebounce 还是 useForm ,把它们放在统一的 /hooks 文件夹里,可以在不复制代码的情况下复用逻辑。

它们尤其适合处理:

  • API fetching、表单处理
  • 表单处理、动画或副作用
  • 动画或副作用、LocalStorage / session 相关逻辑

没有一种文件夹结构可以适用于所有场景。但我在这里分享的这套布局,已经在个人项目、团队项目以及 hackathon 中被反复验证,具备良好的扩展性。

保持模块化。
保持干净。
保持清晰。


RECOMMEND


推荐阅读
相关文章
|
6月前
|
前端开发 JavaScript API
前端组件库——shadcn/ui知识点大全(一)
教程来源 http://uklgy.cn/ shadcn/ui 是2026年React生态引领变革的UI方案:不提供npm黑盒包,而是通过CLI将可定制、带完整类型与无障碍支持的组件源码(如`button.tsx`)直接复制到项目中。基于Radix UI、Tailwind CSS与自研CLI,赋予开发者对样式、行为与API的完全控制权。GitHub星标超11万,周下载近200万。
|
XML JSON JavaScript
【前端】Vue项目中 JSON 编辑器的使用
【前端】Vue项目中 JSON 编辑器的使用
6739 0
|
9月前
|
JSON 数据可视化 API
实用程序:解放双手!Python 打造 PDF 手写模拟器,轻松搞定手写作业
一款基于Python的PDF手写模拟器,可批量将文字以逼真手写形式填入PDF指定区域。支持中英文独立配置、手写扰动效果调节、模板复用与实时预览,告别手动抄写。开源免费,操作简便,学生党必备!GitHub已开源,欢迎Star!
888 0
|
9月前
|
人工智能 运维 供应链
智能体来了:生产企业如何用AI赚钱
在“智造”转型浪潮下,AI已成为制造企业发展的必选项。本文系统解析AI在研发、生产、供应链、管理等场景的应用路径,提出从数据筑基到智能体落地的四阶段实施框架,揭示避免技术陷阱、组织阻力的关键策略,助力企业以价值驱动、稳步推进智能化升级。
智能体来了:生产企业如何用AI赚钱
|
7月前
|
人工智能 弹性计算 数据可视化
【零基础入门】阿里云OpenClaw一键部署攻略,新手小白也能轻松上手!
OpenClaw(“小龙虾”)是一款开源AI智能体,不仅能聊天,更能自动处理文件、运行代码、收发邮件、执行复杂工作流。阿里云官方提供一键部署方案,可视化操作,10分钟即可拥有专属AI数字员工!
1098 10
|
安全 API
LlamaIndex检索调优实战:分块、HyDE、压缩等8个提效方法快速改善答案质量
本文总结提升RAG检索质量的八大实用技巧:语义分块、混合检索、重排序、HyDE查询生成、上下文压缩、元数据过滤、自适应k值等,结合LlamaIndex实践,有效解决幻觉、上下文错位等问题,显著提升准确率与可引用性。
1144 8
|
9月前
|
存储 编解码 Cloud Native
全链路解析:基于云原生架构的 Bilibili 视频下载引擎实现
本文深入解析基于云原生架构的B站视频下载引擎,涵盖DASH协议分析、音视频分片下载、FFmpeg无损合成及阿里云Serverless部署。结合异步任务编排、OSS存储与反爬策略,实现高效、合规的全链路流媒体解析,适用于离线学习与弱网播放场景。(238字)
1015 1
|
12月前
|
Java Spring 容器
Spring 核心注解 @Autowired 详解:告别 new,拥抱依赖注入!
本文深入解析Spring核心注解@Autowired,涵盖字段、构造器、Setter注入方式,详解@Qualifier、@Primary、required等高级特性,结合@Value、泛型、条件注解的应用场景,提供最佳实践与性能优化建议,助你掌握依赖注入精髓,提升代码可维护性与可测试性。
994 7
|
监控 安全 数据建模
如何通过SSL证书等级提升企业官网可信度?浏览器绿色标识技术解析
本文解析SSL证书等级如何提升企业官网可信度,介绍DV、OV、EV三类证书差异及浏览器绿色标识技术演进。EV证书经严格审核,触发绿色地址栏,显著增强用户信任。结合TLS 1.3配置、CAA防护与OCSP实时验证,保障安全。金融行业合规首选,助力SEO与品牌信任双提升。转载链接:https://www.ffy.com/latest-news/1917097167982432256
449 0
|
JSON API 数据格式
易贝(eBay)item_search 接口对接全攻略:从入门到精通
本文详解eBay开放平台item_search接口的对接全流程,涵盖认证、参数配置、Python代码实现及分页、多站点适配等高级用法,助力开发者高效实现跨境电商选品与市场分析。

热门文章

最新文章