Studio Web (Next.js) 项目结构一览 - Redux + React Query 方案
📁 优化后的目录结构
Studio Web/
├── @types/ # 📝 TypeScript类型定义
│ ├── api.d.ts # 🔌 API响应类型定义
│ ├── store.d.ts # 📦 Redux状态类型定义
│ └── global.d.ts # 🌐 全局类型声明
├── app/ # 🚀 Next.js App Router (页面/路由/布局)
├── components/ # 🧩 React组件库
│ ├── features/ # 📋 业务功能组件 (UserProfile/Dashboard)
│ ├── layout/ # 🏗️ 布局组件 (Header/Footer/Sidebar)
│ └── ui/ # 🎨 基础UI组件 (Button/Input/Modal)
├── configs/ # ⚙️ 应用配置 (环境变量/常量配置)
├── hooks/ # 🎣 自定义Hooks
│ ├── queries/ # 🔍 React Query相关Hooks (服务端状态)
│ └── store/ # 📦 Redux相关Hooks (客户端状态)
├── i18n/ # 🌍 国际化 (多语言翻译文件)
├── lib/ # 📚 第三方库配置
│ ├── react-query.ts # ⚡ React Query客户端配置
│ └── redux.ts # 📦 Redux Store配置
├── service/ # 🔌 API服务层 (纯HTTP请求函数)
├── providers/ # 🔐 全局Provider组件
├── store/ # 📦 Redux状态管理 (客户端状态)
│ ├── slices/ # 🔪 Redux切片 (auth/ui/filters等)
│ └── index.ts # 🏪 Store配置和导出
└── utils/ # 🛠️ 工具函数 (格式化/验证/通用方法)
🔄 数据流转架构图
完整数据流程
用户交互 → Component → Hook (分流) → 不同状态管理
↓ ↓ ↓ ↓
事件触发 UI渲染 状态查询 执行操作
↑ ↑ ↑ ↑
UI更新 ← Component ← Hook ←── 状态更新通知
服务端状态流 (React Query)
Component → hooks/queries/useUsers → service/userService → API
↓ ↓ ↓ ↓
调用Hook 执行查询 HTTP请求 后端处理
↑ ↑ ↑ ↑
自动更新 ← React Query缓存 ← userService ← API Response
客户端状态流 (Redux)
Component → hooks/store/useAuth → store/slices/authSlice → Redux Store
↓ ↓ ↓ ↓
触发Action 调用dispatch 执行Reducer 状态更新
↑ ↑ ↑ ↑
重新渲染 ← useSelector ← store/index.ts ← 状态变更通知
🎯 各模块功能详细划分
📊 状态管理职责分工
状态类型 | 管理工具 | 存储位置 | 典型用例 |
---|---|---|---|
服务端状态 | React Query | Hook缓存 | 用户数据、产品列表、订单信息 |
客户端状态 | Redux | Store | 认证状态、UI状态、表单状态 |
🔌 Service 层 (纯API调用)
// service/userService.ts
export const userService = {
// 纯粹的HTTP请求,无状态逻辑
getUsers: () => fetch('/api/users').then(res => res.json()),
createUser: (data) => fetch('/api/users', { method: 'POST', body: JSON.stringify(data) })
}
🎣 Hooks 层 (状态管理桥梁)
hooks/queries/ - 服务端状态管理
// hooks/queries/useUsers.ts
export const useUsers = (filters) => {
return useQuery({
queryKey: ['users', filters],
queryFn: () => userService.getUsers(filters),
staleTime: 5 * 60 * 1000, // 缓存策略
})
}
export const useCreateUser = () => {
return useMutation({
mutationFn: userService.createUser,
onSuccess: () => queryClient.invalidateQueries(['users'])
})
}
hooks/store/ - 客户端状态管理
// hooks/store/useAuth.ts
export const useAuth = () => {
const dispatch = useDispatch()
return {
...useSelector(state => state.auth),
login: (credentials) => dispatch(login(credentials)),
logout: () => dispatch(logout())
}
}
📦 Store 层 (客户端状态)
// store/slices/authSlice.ts - 认证状态
const authSlice = createSlice({
name: 'auth',
initialState: { user: null, isAuthenticated: false },
reducers: { login, logout }
})
// store/slices/uiSlice.ts - UI状态
const uiSlice = createSlice({
name: 'ui',
initialState: { sidebarOpen: false, theme: 'light' },
reducers: { toggleSidebar, setTheme }
})
📚 Lib 层 (第三方库配置)
// lib/react-query.ts
export const queryClient = new QueryClient({
defaultOptions: {
queries: { staleTime: 60 * 1000, cacheTime: 5 * 60 * 1000 }
}
})
// lib/redux.ts
export const store = configureStore({
reducer: {
auth: authSlice.reducer,
ui: uiSlice.reducer
}
})
🏗️ 实际使用示例
复杂页面组件
// app/dashboard/page.tsx
'use client'
export default function DashboardPage() {
// 服务端状态 (React Query)
const { data: users, isLoading } = useUsers()
const { data: orders } = useOrders()
const createUserMutation = useCreateUser()
// 客户端状态 (Redux)
const { isAuthenticated } = useAuth()
const { sidebarOpen, filters } = useUI()
return <Dashboard {...props} />
}
数据流总结图
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Component │ │ Hooks │ │ State Manager │
│ │ │ │ │ │
│ ┌─────────────┐│ │ ┌──────────────┐ │ │ ┌─────────────┐ │
│ │ 用户交互 ││───→│ │queries/ │ │───→│ │React Query │ │
│ │ ││ │ │useUsers() │ │ │ │ Cache │ │
│ └─────────────┘│ │ └──────────────┘ │ │ └─────────────┘ │
│ │ │ │ │ │
│ ┌─────────────┐│ │ ┌──────────────┐ │ │ ┌─────────────┐ │
│ │ UI状态切换 ││───→│ │store/ │ │───→│ │Redux Store │ │
│ │ ││ │ │useAuth() │ │ │ │ │ │
│ └─────────────┘│ │ └──────────────┘ │ │ └─────────────┘ │
└─────────────────┘ └──────────────────┘ └─────────────────┘
↑ ↑ ↑
└───────────────────────┴───────────────────────┘
状态变更通知,触发重新渲染
完整的应用层级结构
┌─────────────────────────────────────────────────────────────┐
│ app/layout.tsx │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ RootProvider │ │
│ │ ┌─────────────────────────────────────────────────┐ │ │
│ │ │ StoreProvider │ │ │
│ │ │ ┌───────────────────────────────────────────┐ │ │ │
│ │ │ │ QueryProvider │ │ │ │
│ │ │ │ ┌─────────────────────────────────────┐ │ │ │ │
│ │ │ │ │ AuthProvider │ │ │ │ │
│ │ │ │ │ ┌───────────────────────────────┐ │ │ │ │ │
│ │ │ │ │ │ MoreProviders... │ │ │ │ │ │
│ │ │ │ │ │ ┌─────────────────────────┐ │ │ │ │ │ │
│ │ │ │ │ │ │ Page Components │ │ │ │ │ │ │
│ │ │ │ │ │ └─────────────────────────┘ │ │ │ │ │ │
│ │ │ │ │ └───────────────────────────────┘ │ │ │ │ │
│ │ │ │ └─────────────────────────────────────┘ │ │ │ │
│ │ │ └───────────────────────────────────────────┘ │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
🏆 架构优势总结
- 🎯 职责清晰: 服务端/客户端状态分离管理
- ⚡ 性能优化: React Query自动缓存 + Redux精确更新
- 🔧 易于维护: 每种状态都有专门的管理方案
- 🧪 易于测试: Service层纯函数 + Hook层逻辑封装
- 📈 可扩展性: 支持复杂应用的状态管理需求
这是现代复杂React应用的最佳状态管理架构! 🎉