Vue 路由传参的四种方式

在单页应用里,路由是连接页面与数据的桥梁。Vue Router 提供了四种方式把「参数」从地址栏、内存甚至编译期注入到组件。理解它们的差异,才能在面试和线上故障中游刃有余。

一、路径参数

把参数写进路径,直观且 SEO 友好。

js 复制代码
// router.js
{ path: '/user/:userId', component: User }

访问 /user/42,组件内部:

ts 复制代码
const route = useRoute()
console.log(route.params.userId) // '42'
  • 优点:可收藏、可分享、可被搜索引擎收录。
  • 注意:使用正则捕获可限制类型,如 :userId(\\d+) 只接受数字。

二、查询参数

问号后的 key=value 对,天然支持多值与可选。

ts 复制代码
router.push({ path: '/user', query: { id: 42, tab: 'profile' } })

组件读取:

ts 复制代码
const route = useRoute()
console.log(route.query.tab) // 'profile'
  • 场景:分页、筛选、弹窗状态。
  • 陷阱:刷新页面后仍然存在,敏感信息需加密。

三、路由状态参数

state 不会出现在 URL,适合临时或敏感数据。

ts 复制代码
router.push({ path: '/confirm', state: { orderId: 'xxx' } })

组件读取:

ts 复制代码
import { useHistoryState } from '@vueuse/core'
console.log(history.state.orderId) // 'xxx'
  • 特性:刷新即消失,同源安全;常用于「下一步」导流。
  • 限制:SSR 场景下为空,因为服务端没有浏览器 history。

四、路由 Props

把路径或查询自动映射为组件 Props,告别 $route 依赖。

js 复制代码
{ path: '/user/:id', component: User, props: true }

组件直接:

vue 复制代码
<script setup>
const props = defineProps(['id'])
</script>
  • 进阶:传入函数可实现自定义映射,如把查询映射为对象。
  • 测试:单元测试无需 mock $route,直接传 Props。

总结

路径参数让 URL 会说话,查询参数让 URL 会传表,状态参数让内存做快递,Props 让组件零耦合。掌握四种姿势,Vue 路由从此游刃有余。

相关推荐
前端小配角24 分钟前
React难上手原因找到了,原来是因为坑太多了。。。
前端
是你的小橘呀25 分钟前
零基础也能懂!React Hooks实战手册:useState/useEffect上手就会,告别类组件
前端·架构
xhxxx26 分钟前
从样式到结构:TailwindCss + Fragment 如何让 React 代码更干净、更高效
前端·css·react.js
Maxkim28 分钟前
「✍️JS原子笔记 」深入理解JS数据类型检测的4种核心方式
前端·javascript·面试
小高00729 分钟前
Elips-Core:轻量级 Node.js Web 框架核心实现
前端·javascript·node.js
Focus_32 分钟前
SSE+broadcastChannel
前端
zabr34 分钟前
前端已死?我用 Trae + Gemini 零代码手搓 3D 塔罗牌,找到了新出路
前端·人工智能·aigc
Aotman_35 分钟前
Vue MutationObserver 监听
前端·javascript·vue.js·elementui·前端框架·ecmascript
专注前端30年39 分钟前
Vue3的生命周期钩子有哪些变化?
前端·javascript·vue.js
一 乐1 小时前
健身房预约|基于springboot + vue健身房预约小程序系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习·小程序