Vue Router 的模式、守卫和路由复用怎么处理?

先理解原理和示例,再练习完整口述与追问。

hash 使用 URL 片段,history 模式要配合服务端回退,同时避免错误吞掉静态资源和接口 404。动态参数变化可能复用组件;通过参数监听或更新守卫处理数据。Router 3 中使用 next 时确保每条路径只完成一次。

hash 模式主要由浏览器片段驱动导航,服务端通常只收到片段前的路径;history 模式使用正常路径,直接刷新子路由时服务端必须有适合 SPA 的回退规则。路由守卫负责进入、离开或更新时的流程控制,但真实授权在服务端。相同路由组件只是 params 改变时,经常会复用实例,不会重新执行全部创建流程。

从 /users/1 切到 /users/2 时,应通过 beforeRouteUpdate 或 watch 对应参数发起新请求,并处理旧请求竞态。部署 history SPA 时,/users/2 可回退到入口 HTML;/api 和静态文件则不应一律回退,否则会把接口 404 和丢失 JS 伪装成 HTML 成功响应。

Vue Router3 的 next 风格与 Router4 的返回值式守卫不要混写。动态路由重复注册、重定向不带退出条件和未清理守卫,都可能制造循环或旧权限残留。

hash 路由把路径信息放在片段中,片段不会作为普通请求路径发给服务端;history 路由使用正常路径,因此直接访问详情地址时服务器要把应用路由回退到入口 HTML,同时保留真实静态资源和接口的 404。守卫处理鉴权和导航,参数变化复用组件时应监听目标参数或用 beforeRouteUpdate 更新数据。

面试官可能继续问追问与完整解答展开收起

直接刷新详情页为什么 404?只改 params 为什么不重新 mounted?登录重定向如何防循环?

刷新 404 常因服务端没有配置 history 回退。参数变化仍匹配同一组件时,实例可被复用,所以 mounted 不重跑。登录守卫应放行登录页与公共页,只在未认证的受保护页重定向,记录原地址并验证跳转目标;Router 3 使用 next 时每条路径只能调用一次。