Feature-Based 前端目录结构

按业务功能而非技术类型组织前端目录的设计:每个 feature 自包含组件/hooks/服务/页面,共享代码放顶层。

#type / concept #status / growing #tech / dev / frontend

[!info] related notes

Feature-Based 前端目录结构

两种组织方式

按技术类型(Type-Based)

src/
├── components/     # 所有组件混在一起
├── hooks/          # 所有 hooks
├── services/       # 所有 API 调用
└── pages/          # 所有页面

问题:改一个功能要跨 4-5 个目录找文件。

按业务功能(Feature-Based)

src/
├── components/     # 共享 UI 组件
├── stores/         # 全局状态
├── features/
│   ├── auth/       # 认证
│   │   ├── components/
│   │   ├── services/
│   │   └── pages/
│   ├── consultation/  # 咨询
│   │   ├── components/
│   │   ├── hooks/
│   │   ├── services/
│   │   └── pages/
│   └── profile/    # 档案
└── App.tsx

好处:一个功能的所有代码在一个目录下,删除功能 = 删除目录。

各层职责

位置职责
共享 UIcomponents/Button、Card 等纯展示组件
功能组件features/*/components/只在该 feature 内使用
功能 hooksfeatures/*/hooks/专用逻辑
API 调用features/*/services/封装 HTTP 请求
页面features/*/pages/路由级组件

Feature 间通信

Feature 之间不直接引用对方的代码。通信方式:

  1. 全局 store — 两个 feature 读写同一个 Zustand store
  2. 路由 — 跳转到另一个 feature 的页面
  3. 共享组件 — 提取共同 UI 到顶层 components/

何时拆出新 feature

  • 有独立的页面(至少 1 个路由)
  • 有专用的 API 调用
  • 有 3+ 个专用组件
创建于 2026/6/25 更新于 2026/6/25