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