
Vue 3 中 Query 和 Params 传值的区别
在 Vue 3 应用中,我们经常需要在组件之间传递数据。特别是在使用 Vue Router 时,query 和 params 是两种常见的传值方式。尽管它们都可以用来传递参数,但它们的使用场景和表现行为有所不同。以下是它们的详细对比:
一、Query 参数
定义:
- query 参数附加在 URL 的问号(?)后面,以键值对的形式存在,多个键值对之间用 & 连接。
URL 格式:
http://example.com/path?key1=value1&key2=value2用法:
- 在声明路由时,不需要特别配置 query 参数。
- 使用 this.$router.push 或 useRouter().push 方法时,可以通过 query 选项来传递参数。
示例代码:
// 使用 Composition API import { useRouter } from 'vue-router'; setup() { const router = useRouter(); function navigateWithQuery() { router.push({ path: '/somePath', query: { foo: 'bar', baz: 'qux' } }); } return { navigateWithQuery }; }获取:
- 在目标组件中,通过 this.$route.query 或 useRoute().query 来访问这些参数。
适用场景:
- 用于非敏感数据的传递,如分页信息、筛选条件等。
- 适合需要用户分享链接并保留查询条件的场景。
二、Params 参数
定义:
- params 参数是动态段的一部分,通常用于指定资源的唯一标识符(如 ID)。
URL 格式:
http://example.com/path/value1/value2或者带有静态路径部分:
http://example.com/user/:id/profile用法:
- 在声明路由时,需要在路径中使用占位符(如 :id)来指定 params 参数。
- 使用 this.$router.push 或 useRouter().push 方法时,需要通过 params 选项来传递参数,并且必须指定 name 而不是 path。
示例代码:
// 路由配置 (router/index.js) { path: '/user/:id', name: 'User', component: UserComponent, } // 使用 Composition API import { useRouter } from 'vue-router'; setup() { const router = useRouter(); function navigateWithParams() { router.push({ name: 'User', params: { id: 123 } }); } return { navigateWithParams }; }获取:
- 在目标组件中,通过 this.$route.params 或 useRoute().params 来访问这些参数。
适用场景:
- 用于指定资源或实体的唯一标识,如用户 ID、文章 ID 等。
- 不适合在 URL 中暴露过多细节,因为 params 参数的值会直接影响 URL 结构。
三、总结
- Query 参数:适用于附加的、可选的信息传递,不会改变 URL 的基本结构。
- Params 参数:用于指定资源的唯一性,是 URL 结构的一部分。
选择哪种方式取决于你的具体需求和数据敏感性。希望这篇文章能帮助你更好地理解 Vue 3 中的 query 和 params 传值方式!
