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 QueryHook缓存用户数据、产品列表、订单信息
客户端状态ReduxStore认证状态、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应用的最佳状态管理架构! 🎉

Was this page helpful?