# Redux 全局状态管理设置说明 ## 📦 安装依赖 请手动运行以下命令安装 Redux 相关依赖: ```bash cd frontend npm install @reduxjs/toolkit react-redux ``` ## ✅ 已完成的实现 ### 1. Redux Store 结构 **文件**: `frontend/src/store/index.js` - 配置了 Redux store - 使用 `@reduxjs/toolkit` 的 `configureStore` **文件**: `frontend/src/store/appSlice.js` - 管理全局状态: - `currentUser`: 当前登录用户 - `viewingUserId`: 管理员查看的用户ID - `accountId`: 当前选中的账号ID - `accounts`: 当前用户的账号列表 - `users`: 用户列表(管理员可见) ### 2. 已更新的组件 #### App.jsx - ✅ 使用 `Provider` 包裹整个应用 - ✅ 使用 Redux hooks (`useSelector`, `useDispatch`) - ✅ 用户切换逻辑使用 Redux actions #### AccountSelector.jsx - ✅ 完全使用 Redux 管理账号选择 - ✅ 用户切换时自动选择第一个 active 账号 - ✅ 账号切换时自动同步到 Redux store #### StatsDashboard.jsx - ✅ 使用 `useSelector(selectAccountId)` 获取当前账号ID - ✅ 当 `accountId` 变化时自动重新加载数据 #### TradeList.jsx - ✅ 使用 `useSelector(selectAccountId)` 获取当前账号ID - ✅ 当 `accountId` 变化时自动重新加载数据 #### Recommendations.jsx - ✅ 使用 `useSelector(selectAccountId)` 获取当前账号ID - ✅ 当 `accountId` 变化时自动更新默认下单量 #### ConfigPanel.jsx - ✅ 使用 Redux 获取 `accountId`, `currentUser`, `isAdmin` 等 - ✅ 移除了 localStorage 轮询和事件监听 - ✅ 当 `accountId` 变化时自动重新加载配置 #### GlobalConfig.jsx - ✅ 使用 Redux 获取 `currentUser`, `isAdmin` - ✅ 移除了 props 传递 ## 🔄 工作流程 ### 用户切换流程 1. 管理员点击切换用户 2. `App.jsx` 调用 `dispatch(switchUser(userId))` 3. Redux store 更新 `viewingUserId` 4. `AccountSelector` 监听到 `viewingUserId` 变化 5. 自动加载新用户的账号列表 6. 自动选择第一个 active 账号 7. Redux store 更新 `accountId` 8. 所有使用 `useSelector(selectAccountId)` 的组件自动重新渲染 9. 各组件在 `useEffect` 中检测到 `accountId` 变化,重新加载数据 ### 账号切换流程 1. 用户在 `AccountSelector` 中选择账号 2. `AccountSelector` 调用 `dispatch(setAccountId(accountId))` 3. Redux store 更新 `accountId` 4. 所有使用 `useSelector(selectAccountId)` 的组件自动重新渲染 5. 各组件在 `useEffect` 中检测到 `accountId` 变化,重新加载数据 ## 🎯 优势 1. **统一状态管理**: 所有用户和账号状态都在 Redux store 中 2. **自动同步**: 切换用户/账号后,所有页面自动更新 3. **响应式**: 使用 React hooks,状态变化自动触发重新渲染 4. **易于调试**: Redux DevTools 可以查看所有状态变化 5. **向后兼容**: 保留了自定义事件 (`ats:account:changed`),确保旧代码仍能工作 ## 📝 注意事项 1. **需要安装依赖**: 请运行 `npm install @reduxjs/toolkit react-redux` 2. **localStorage 同步**: Redux store 会自动同步到 localStorage,确保刷新后状态不丢失 3. **事件兼容**: 保留了 `ats:account:changed` 事件,但主要使用 Redux 状态管理 ## 🚀 下一步 安装依赖后,系统将完全使用 Redux 管理用户和账号状态,切换用户/账号时所有页面会自动同步更新。