Vue3 路由守卫、参数与异步请求怎么协调?
先理解原理和示例,再练习完整口述与追问。
回答要点
区分进入前鉴权、组件复用后的参数变化与数据获取;监听需要的参数,避免监听整个路由导致重复请求。守卫的放行、重定向、取消与错误处理要覆盖所有分支。
原理拆解
导航与数据请求是相关但独立的状态机。守卫可判断身份、重定向或等待关键条件;组件复用时参数变化仍需更新数据,并取消或隔离旧请求。请求状态应与当前路由参数绑定,错误与不存在资源要有明确展示。对可恢复的页面加载,不必让全部非关键接口都阻塞路由进入。
示例与推演
从商品 1 快速切到商品 2:记录当前 ID 与请求序号,商品 1 的返回若已不对应当前导航就忽略;商品 2 返回 404 则展示不存在状态。若离开编辑页需确认未保存内容,在离开守卫表达规则;服务端权限校验失败仍要单独处理,不能仅靠路由守卫。
易错点
守卫中的重定向需要退出条件,避免登录页再次跳登录页。用路由 path 作全局缓存键时也要包含必要查询参数和用户边界。
参考回答可直接练习口述
路由守卫适合处理是否允许进入、是否重定向等导航决策;进入后的数据请求可由页面或数据层负责,并避免两边重复拉取。复用页面时监听具体 id 等必要参数,离开或参数变化后取消旧请求。返回式守卫用 false 取消、返回地址重定向,成功路径正常放行。
面试官可能继续问追问与完整解答展开收起
追问
异步获取权限后怎样继续原目标地址?返回式守卫与 next 风格有什么差异?切换路由时旧请求怎么办?Vue Router 官方导航守卫
追问回答
拿到权限后验证目标地址是否允许,再继续原目标,且放行登录页防重定向循环。next 风格可以兼容使用,但只能完成一次,返回式更容易写清分支。参数变化和路由离开时清理旧任务,即便取消失败也用请求标识隔离旧结果。