前端获取用户数据的API调用位置及存储方案选型
用户信息类API调用位置与存储方案选型
没有非黑即白的标准答案,根据项目规模和实际需求选就行:
- 小型项目优先选
_app.js初始化调用+透传的方案
如果全项目需要用到用户名、权限这类用户信息的组件很少,也没有复杂的跨组件状态同步需求,完全没必要额外引入状态管理库。你可以直接在根组件_app.js的挂载阶段做逻辑:先从localStorage读取存好的JWT,令牌存在且没过期就调用接口拉取完整用户信息,拿到数据之后通过props或者轻量的Context往下传给需要用到的页面和组件即可,实现简单没有额外依赖。注意:不要直接解析本地JWT的payload当用户信息用,必须以后端接口返回的最新数据为准,避免JWT被篡改、用户权限/信息已经变更但前端读取旧数据导致的逻辑错误。
- 中大型项目直接上全局状态管理统一存储
只要你的项目满足下面任意一个特征,就别用逐层传参的方式,选Redux或者其他你习惯的全局状态方案(Zustand、Jotai都可以,不强制用Redux)存用户数据:- 大量页面、组件需要读取用户信息:比如导航栏要展示头像昵称、各个业务页要判断用户操作权限、个人中心要加载/编辑用户资料,靠props逐层传递会写大量重复的传参代码,后期改字段要顺着组件树改一堆文件,维护成本极高
- 存在跨组件的用户状态更新需求:比如用户在个人中心修改了头像昵称,需要全项目所有展示用户信息的位置实时同步;或者用户登录态过期、被管理员踢下线时,要全局触发退出登录、跳转登录页的逻辑
- 需要做请求缓存:把拉取到的用户数据存在全局store里,后续组件使用时直接读缓存即可,不用每次进入新页面都重复发起拉取用户信息的接口
补充下实际开发的通用实践:哪怕用全局状态管理,用户信息接口的调用时机一般也放在_app.js的应用初始化逻辑,或者全局路由守卫里:应用首次加载、每次路由跳转前先检查本地有没有有效JWT、全局store里有没有已缓存的用户信息,满足请求条件再触发接口调用,拿到数据后写入全局store供全项目组件调用即可。
内容的提问来源于stack exchange,提问作者Vraj Solanki
相关产品推荐
相关产品推荐

