- 移除了冗余的数据获取逻辑,统一使用 useUserData Hook - 优化了登录状态更新流程,使用 loginUser 方法统一处理登录 - 添加了登录成功后的提示和页面数据刷新
99 lines
3.5 KiB
Markdown
99 lines
3.5 KiB
Markdown
# 登录状态实时更新测试指南
|
||
|
||
## 问题描述
|
||
之前的问题是:用户登录成功后,Header组件的登录状态没有实时更新,需要刷新页面才能看到登录状态的变化。
|
||
|
||
## 解决方案
|
||
修改了以下组件,使其使用 `useUser` Hook 来管理用户状态:
|
||
|
||
1. **Header组件** (`src/pages/index/Header.tsx`)
|
||
2. **UserCard组件** (`src/pages/user/components/UserCard.tsx`)
|
||
3. **Admin UserCard组件** (`src/admin/components/UserCard.tsx`)
|
||
|
||
## 额外优化:清理冗余代码
|
||
发现 UserCard 组件中存在冗余的数据获取逻辑:
|
||
- `useUserData` Hook 已经动态获取了优惠券、礼品卡、积分、余额等数据
|
||
- 删除了重复的本地状态:`couponCount`, `pointsCount`, `giftCount`
|
||
- 删除了重复的数据获取方法:`loadUserStats`
|
||
- 统一使用 `useUserData` 提供的数据
|
||
|
||
### 主要修改内容
|
||
|
||
#### 1. Header组件修改
|
||
- 移除了本地状态 `IsLogin` 和 `userInfo`
|
||
- 使用 `useUser` Hook 的 `user`, `isLoggedIn`, `loginUser`, `fetchUserInfo`
|
||
- 登录成功后调用 `loginUser(token, userData)` 而不是直接设置本地状态
|
||
- 移除了 `Taro.reLaunch` 重新启动小程序的逻辑
|
||
|
||
#### 2. UserCard组件修改
|
||
- 类似的修改,使用 `useUser` Hook 管理状态
|
||
- 登录成功后调用 `loginUser(token, userData)`
|
||
|
||
## 测试步骤
|
||
|
||
### 1. 基本登录状态更新测试
|
||
1. 打开小程序,确保处于未登录状态
|
||
2. 在首页Header区域,应该显示"未登录"状态
|
||
3. 点击登录按钮,完成手机号授权登录
|
||
4. **关键测试点**:登录成功后,Header应该立即显示用户信息,无需刷新页面
|
||
|
||
### 2. 跨页面状态同步测试
|
||
1. 在首页完成登录
|
||
2. 切换到用户中心页面
|
||
3. 检查UserCard组件是否正确显示登录状态
|
||
4. 返回首页,检查Header组件状态是否保持一致
|
||
|
||
### 3. 退出登录测试
|
||
1. 在用户中心点击"退出登录"
|
||
2. 返回首页,检查Header是否立即显示未登录状态
|
||
|
||
### 4. 页面刷新测试
|
||
1. 登录后刷新页面(或重新进入小程序)
|
||
2. 检查登录状态是否正确从本地存储恢复
|
||
|
||
## 预期结果
|
||
|
||
### 修改前的问题
|
||
- 登录成功后需要 `Taro.reLaunch` 重新启动小程序
|
||
- 状态更新不实时,用户体验差
|
||
|
||
### 修改后的预期效果
|
||
- 登录成功后立即更新UI状态
|
||
- 无需重新启动小程序
|
||
- 所有使用 `useUser` Hook 的组件都能实时同步状态
|
||
- 更好的用户体验
|
||
|
||
## 技术实现原理
|
||
|
||
### useUser Hook 的优势
|
||
1. **集中状态管理**:所有用户相关状态都在一个地方管理
|
||
2. **自动同步**:所有使用该Hook的组件都会自动同步状态变化
|
||
3. **持久化存储**:自动处理本地存储的读写
|
||
4. **错误处理**:统一的错误处理逻辑
|
||
|
||
### 状态更新流程
|
||
```
|
||
用户登录 → loginUser(token, userData) → 更新Hook状态 → 所有组件自动重新渲染
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
1. **确保所有相关组件都使用useUser Hook**:避免混用本地状态和全局状态
|
||
2. **测试边界情况**:网络错误、token过期等情况
|
||
3. **性能考虑**:useUser Hook 已经优化了不必要的重新渲染
|
||
|
||
## 如果测试失败
|
||
|
||
如果登录后状态仍然没有实时更新,请检查:
|
||
|
||
1. 组件是否正确导入和使用了 `useUser` Hook
|
||
2. 登录成功后是否调用了 `loginUser` 方法
|
||
3. 是否还有其他地方使用了本地状态而不是Hook状态
|
||
4. 控制台是否有错误信息
|
||
|
||
## 进一步优化建议
|
||
|
||
1. 可以考虑添加加载状态指示器
|
||
2. 可以添加登录状态变化的动画效果
|
||
3. 可以考虑使用 React Context 进一步优化性能
|