退出登录调了 store.reset(),主题从深色跳回浅色,语言从英文变回中文,侧边栏折叠状态也丢了,用户下次登录要重设 4 项偏好。乍看像缓存或者权限的锅,追下去往往不是。
logout: () => set({ token: null, user: null }),
// 不要用 set(initialState, true)
追下去是这么回事:重置直接把整个 store 覆盖成初始值,偏好设置和登录态存在同一个 store 里。退出只需要清身份相关字段,其余不该动。
碰到「退出登录状态重置」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
偶发问题先统计频率,一小时几次和一天一次,查法完全不同。改完顺手把文档补一句,省得下次自己重新推一遍。
具体做法是,把偏好拆到单独的 store 或单独的持久化键;退出登录只调 logout 清 token 和用户信息;需要整体重置时保留白名单字段;退出再登录 核对主题语言是否还在。
验收就看一点,退出再登录后主题、语言、侧边栏状态都保持退出前的选择。
