当前位置: 首页 > news >正文

Vue Router 4 新特性

文章目录

  • 前言
  • 一、Vue Router 4 基本配置
    • 1.1 创建路由
    • 1.2 与 Vue Router 3 的主要变化
  • 二、历史模式
    • 2.1 三种模式
    • 2.2 History vs Hash
  • 三、useRouter 与 useRoute
    • 3.1 useRouter:编程式导航
    • 3.2 useRoute:当前路由信息
    • 3.3 与 Options API 对照
  • 四、route 对象的响应性
    • 4.1 Vue Router 4 的响应性
    • 4.2 模板中直接使用
    • 4.3 易混淆点
  • 五、路由配置
    • 5.1 动态路由
    • 5.2 嵌套路由
    • 5.3 路由 meta 元信息
    • 5.4 命名视图
  • 六、声明式导航
    • 6.1 router-link
  • 七、面试聚焦
    • 7.1 route.params 和 route.query 的响应性
    • 7.2 History 与 Hash 模式区别
    • 7.3 useRouter vs useRoute
  • 八、易混淆点
  • 九、思考与练习
  • 总结

前言

Vue Router 4 是 Vue 3 的官方路由库,全面拥抱 Composition API。本篇会讲清楚:

  • Vue Router 4 的基本配置
  • useRouter/useRoute组合式 API
  • route 对象的响应性
  • 历史模式与导航方式

一、Vue Router 4 基本配置

1.1 创建路由

// router/index.jsimport{createRouter,createWebHistory}from'vue-router'importHomefrom'@/views/Home.vue'constroutes=[{path:'/',name:'Home',component:Home},{path:'/about',name:'About',component:()=>import('@/views/About.vue')},{path:'/user/:id',name:'User',component:()=>import('@/views/User.vue')}]constrouter=createRouter({history:createWebHistory(),// HTML5 History 模式routes})exportdefaultrouter
// main.jsimport{createApp}from'vue'importAppfrom'./App.vue'importrouterfrom'./router'createApp(App).use(router).mount('#app')

1.2 与 Vue Router 3 的主要变化

对比项Vue Router 3Vue Router 4
创建方式new VueRouter()createRouter()
历史模式mode: 'history'createWebHistory()
组件 APIthis.$router/this.$routeuseRouter()/useRoute()
导航控制next()回调return
Vue 版本Vue 2Vue 3

二、历史模式

2.1 三种模式

import{createWebHistory,// HTML5 HistorycreateWebHashHistory,// Hash 模式createMemoryHistory// 内存模式(SSR/测试)}from'vue-router'// 1. History 模式(推荐,URL 无 #)createRouter({history:createWebHistory(),routes})// URL: https://example.com/user/1// 2. Hash 模式(兼容性好,URL 带 #)createRouter({history:createWebHashHistory(),routes})// URL: https://example.com/#/user/1// 3. Memory 模式(无浏览器地址栏,用于 SSR)createRouter({history:createMemoryHistory(),routes})

2.2 History vs Hash

对比项HistoryHash
URL/user/1/#/user/1
服务端配置需要 fallback 到 index.html不需要
SEO更好较差
兼容性需服务端支持全兼容
# Nginx History 模式配置 location / { try_files $uri $uri/ /index.html; }

三、useRouter 与 useRoute

3.1 useRouter:编程式导航

<script setup> import { useRouter } from 'vue-router' const router = useRouter() // 跳转到路径 const goHome = () => router.push('/') // 跳转到命名路由 const goUser = () => router.push({ name: 'User', params: { id: 1 } }) // 带 query const goSearch = () => router.push({ path: '/search', query: { q: 'vue' } }) // 替换当前历史记录(不可后退) const replaceLogin = () => router.replace('/login') // 前进 / 后退 const goBack = () => router.back() const goForward = () => router.forward() const goSteps = () => router.go(-2) </script>

3.2 useRoute:当前路由信息

<script setup> import { useRoute } from 'vue-router' const route = useRoute() // 访问路由信息 console.log(route.path) // '/user/1' console.log(route.params) // { id: '1' } console.log(route.query) // { tab: 'profile' } console.log(route.meta) // { title: '用户详情', auth: true } console.log(route.name) // 'User' </script> <template> <div> <p>用户 ID:{{ route.params.id }}</p> <p>Tab:{{ route.query.tab }}</p> </div> </template>

3.3 与 Options API 对照

// Options APIthis.$router.push('/about')this.$route.params.id// Composition APIconstrouter=useRouter()constroute=useRoute()router.push('/about')route.params.id

四、route 对象的响应性

4.1 Vue Router 4 的响应性

<script setup> import { watch } from 'vue' import { useRoute } from 'vue-router' const route = useRoute() // route 是响应式对象,params/query 变化会自动更新 watch( () => route.params.id, (newId) => { fetchUserDetail(newId) } ) // 监听 query 变化 watch( () => route.query.tab, (tab) => { loadTabContent(tab) } ) </script>

4.2 模板中直接使用

<template> <!-- route 在模板中自动解包,无需 .value --> <h1>{{ route.params.id }}</h1> <p>{{ route.query.keyword }}</p> </template>

4.3 易混淆点

// ✅ route 整体是响应式的constroute=useRoute()watch(()=>route.params.id,handler)// ⚠️ 解构会失去响应性(与 props 类似)const{id}=route.params// id 不是响应式的// ✅ 用 toRef 保持响应性import{toRef}from'vue'constid=toRef(()=>route.params.id)// 或constid=computed(()=>route.params.id)

五、路由配置

5.1 动态路由

constroutes=[// 动态参数{path:'/user/:id',component:User},// 可选参数(?){path:'/user/:id?',component:User},// 多个参数{path:'/post/:category/:id',component:Post},// 正则限制{path:'/user/:id(\\d+)',component:User}// id 必须是数字]

5.2 嵌套路由

constroutes=[{path:'/user/:id',component:UserLayout,children:[{path:'',component:UserProfile},// /user/1{path:'posts',component:UserPosts},// /user/1/posts{path:'settings',component:UserSettings}// /user/1/settings]}]
<!-- UserLayout.vue --> <template> <div> <nav>...</nav> <router-view /> <!-- 子路由渲染位置 --> </div> </template>

5.3 路由 meta 元信息

constroutes=[{path:'/admin',component:Admin,meta:{title:'管理后台',auth:true,roles:['admin']}}]// 组件或守卫中使用if(route.meta.auth){/* 需要登录 */}document.title=route.meta.title

5.4 命名视图

<!-- 同时渲染多个 router-view --> <template> <router-view name="sidebar" /> <router-view /> <!-- 默认 name="default" --> </template>
{path:'/settings',components:{default:SettingsMain,sidebar:SettingsSidebar}}

六、声明式导航

6.1 router-link

<template> <!-- 基本用法 --> <router-link to="/">首页</router-link> <!-- 命名路由 --> <router-link :to="{ name: 'User', params: { id: 1 } }">用户</router-link> <!-- 带 query --> <router-link :to="{ path: '/search', query: { q: 'vue' } }">搜索</router-link> <!-- 自定义激活类名 --> <router-link to="/about" active-class="active" exact-active-class="exact-active"> 关于 </router-link> <!-- 渲染为其他标签 --> <router-link to="/home" custom v-slot="{ navigate, isActive }"> <button @click="navigate" :class="{ active: isActive }">首页</button> </router-link> </template>

七、面试聚焦

7.1 route.params 和 route.query 的响应性

// Vue Router 4 中 useRoute() 返回的 route 是响应式对象// params/query 变化时,依赖它们的 computed/watch 会自动更新constroute=useRoute()watch(()=>route.params.id,fetchDetail)

7.2 History 与 Hash 模式区别

// History:URL 无 #,需服务端配置,SEO 更好// Hash:URL 带 #,无需服务端配置,兼容性好

7.3 useRouter vs useRoute

// useRouter:路由器实例,用于 push/replace/back 等导航操作// useRoute:当前路由信息,只读,用于读取 path/params/query/meta

八、易混淆点

  1. useRouter vs useRoute:前者是路由器(导航),后者是当前路由信息(只读)。
  2. 解构 route.params 失去响应性:需用computedtoRef保持响应性。
  3. History 模式需服务端配置:所有路径 fallback 到 index.html,否则刷新 404。
  4. params vs query:params 是路径一部分(/user/:id),query 是查询字符串(?tab=1)。
  5. router-link 的 to:可以是字符串路径或{ name, params, query }对象。

九、思考与练习

1.Vue Router 4 如何创建路由?

解析:使用createRouter({ history: createWebHistory(), routes }),在 main.js 中app.use(router)

2.useRouter 和 useRoute 的区别?

解析:

  • useRouter:路由器实例,用于pushreplaceback等导航
  • useRoute:当前激活路由的信息对象,读取paramsquerymeta

3.route.params 是响应式的吗?

解析:是。useRoute()返回的 route 是响应式对象,params/query 变化会触发依赖更新。但解构route.params.id会失去响应性。

4.History 模式和 Hash 模式如何选择?

解析:

  • History:现代项目首选,URL 美观,需 Nginx 等配置 fallback
  • Hash:无需服务端配置,适合静态部署或老项目

5.如何监听路由参数变化重新加载数据?

constroute=useRoute()watch(()=>route.params.id,(id)=>{fetchDetail(id)})

总结

  • Vue Router 4createRouter+createWebHistory,全面支持 Composition API
  • useRouter:编程式导航(push、replace、back)
  • useRoute:当前路由信息(path、params、query、meta)
  • 响应性:route 是响应式对象,解构 params 需用 computed/toRef
  • 历史模式:History(推荐)vs Hash(兼容)
http://www.jsqmd.com/news/1046393/

相关文章:

  • Kinetis K63F电气特性深度解析:从数据手册到低功耗系统设计实战
  • MC9S12XE引脚复用与工作模式配置详解
  • 听风唱歌的日子
  • 信息学奥赛解题实战:从“苹果与虫子”问题看条件判断与边界处理
  • Odoo 19会计模块功能:会计资产负债表完整操作指南
  • AI全栈流式响应实战:WebSocket+React+Spring Boot压测指南
  • 厚街企业豆包搜索排名提升秘籍:3步实现AI搜索霸屏的实战教程 - 东莞选校指南
  • 2026蚌埠漏水检测维修精选优质服务商TOP5推荐!卫生间漏水/厨房漏水/屋顶天花板漏水/阳台漏水/地下室漏水防水补漏检测维修-正规防水补漏公司优选口碑榜测评推荐 - 即刻修防水
  • (2026新)淮北正规防水补漏公司口碑榜TOP5权威推荐!卫生间/厨房/阳台/屋顶/天花板/地下室渗漏水检测维修攻略-靠谱漏水检测维修师傅推荐 - 安佳防水
  • (2026新)淄博正规防水补漏公司口碑榜TOP5权威推荐!卫生间/厨房/阳台/屋顶/天花板/地下室渗漏水检测维修攻略-靠谱漏水检测维修师傅推荐 - 安佳防水
  • PC版微信QQ防撤回补丁终极指南:快速掌握消息保留技术
  • 装备制造ERP核心:项目型MRP vs 标准MRP,架构差异与实现要点
  • 2026萍乡本地人必选防水补漏检测维修公司靠谱服务商TOP5推荐:房屋渗漏水检测维修/卫生间/厨房/天花板/阳台/外墙渗漏水检测补漏维修-暗管漏水检测专业仪器精准定位漏水点 - 即刻修防水
  • sd-webui-reactor终极指南:5分钟掌握AI换脸完整技巧
  • (2026新)深圳正规防水补漏公司口碑榜TOP5权威推荐!卫生间/厨房/阳台/屋顶/天花板/地下室渗漏水检测维修攻略-靠谱漏水检测维修师傅推荐 - 安佳防水
  • 深入解析MCU串口通信:从SCI寄存器配置到LIN、RS-485实战应用
  • 2026萍乡漏水检测维修精选优质服务商TOP5推荐!卫生间漏水/厨房漏水/屋顶天花板漏水/阳台漏水/地下室漏水防水补漏检测维修-正规防水补漏公司优选口碑榜测评推荐 - 即刻修防水
  • 关于我的这片小天地
  • 2026应届生必看:JD精准匹配×AI简历重写,5款工具帮你拿下机筛高分
  • 2026蚌埠本地人必选防水补漏检测维修公司靠谱服务商TOP5推荐:房屋渗漏水检测维修/卫生间/厨房/天花板/阳台/外墙渗漏水检测补漏维修-暗管漏水检测专业仪器精准定位漏水点 - 即刻修防水
  • 2026年6月实习管理系统品牌哪个好,实习管理平台/实习系统/实习管理系统,实习管理系统公司在哪找 - 品牌推荐师
  • SQL经典实例——分层查询
  • C++虚函数与运行时多态
  • OpenPLC Editor完全指南:3步搞定免费工业自动化编程
  • 2026年口碑好的PE穿线管/PE电力管/安徽PE管/安徽PE电力管推荐厂家精选 - 品牌宣传支持者
  • 深度解析免费OpenAI API密钥架构:技术实现与安全应用指南
  • MC68HC908GZ ESCI模块深度解析:寄存器操作、波特率配置与调试实战
  • 2026年6月目前评价高的水帘除尘器制造厂家选哪家,喷淋塔除尘器/水帘除尘器/湿式除尘器,水帘除尘器批发厂家推荐 - 品牌推荐师
  • 2026衡水本地人必选防水补漏检测维修公司靠谱服务商TOP5推荐:房屋渗漏水检测维修/卫生间/厨房/天花板/阳台/外墙渗漏水检测补漏维修-暗管漏水检测专业仪器精准定位漏水点 - 即刻修防水
  • Mission Planner:新手到专家的无人机地面站完整指南