3.3 KiB
3.3 KiB
Redux 全局状态管理设置说明
📦 安装依赖
请手动运行以下命令安装 Redux 相关依赖:
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: 管理员查看的用户IDaccountId: 当前选中的账号IDaccounts: 当前用户的账号列表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 传递
🔄 工作流程
用户切换流程
- 管理员点击切换用户
App.jsx调用dispatch(switchUser(userId))- Redux store 更新
viewingUserId AccountSelector监听到viewingUserId变化- 自动加载新用户的账号列表
- 自动选择第一个 active 账号
- Redux store 更新
accountId - 所有使用
useSelector(selectAccountId)的组件自动重新渲染 - 各组件在
useEffect中检测到accountId变化,重新加载数据
账号切换流程
- 用户在
AccountSelector中选择账号 AccountSelector调用dispatch(setAccountId(accountId))- Redux store 更新
accountId - 所有使用
useSelector(selectAccountId)的组件自动重新渲染 - 各组件在
useEffect中检测到accountId变化,重新加载数据
🎯 优势
- 统一状态管理: 所有用户和账号状态都在 Redux store 中
- 自动同步: 切换用户/账号后,所有页面自动更新
- 响应式: 使用 React hooks,状态变化自动触发重新渲染
- 易于调试: Redux DevTools 可以查看所有状态变化
- 向后兼容: 保留了自定义事件 (
ats:account:changed),确保旧代码仍能工作
📝 注意事项
- 需要安装依赖: 请运行
npm install @reduxjs/toolkit react-redux - localStorage 同步: Redux store 会自动同步到 localStorage,确保刷新后状态不丢失
- 事件兼容: 保留了
ats:account:changed事件,但主要使用 Redux 状态管理
🚀 下一步
安装依赖后,系统将完全使用 Redux 管理用户和账号状态,切换用户/账号时所有页面会自动同步更新。