选 params 还是 query,关键看参数是否为“路由身份的一部分”:决定具体资源用 params,影响展示用 query;params 是路径身份证,需路由预定义,如 /user/:id;query 是备注栏,灵活可选,如 /user?id=123。
判断该选 params 还是 query,要看参数属于“路由身份的一部分”,用于确定正在访问的具体资源,还是仅属于影响页面展示的“附加操作指令”。属于前一种情况就用 params,属于后一种情况则用 query。
使用 params 前必须在路由配置中预先声明,例如 /user/:id 中的 :id。它是 URL 路径主体的直接组成部分,作用类似地址门牌号,不能省略。
query 参数无需依赖路由定义,可以添加在任何路径之后,例如 /user?id=123&tab=profile&page=2。从本质上看,它属于查询字符串,与 HTTP GET 请求的逻辑相同。
在真实项目里,两种参数经常同时出现,但各自承担不同职责:
立即学习“前端免费学习笔记(深入)”;
✘ 错误认知:“params 刷新会丢” —— 实际只要路由已经写入 path: '/user/:id',刷新 /user/123 后 params.id 仍然一定存在。参数丢失通常是因为用 path + params 跳转,或者路由中根本没有定义 :id。
✘ 错误写法:为 params 使用 query 风格的跳转 —— { path: '/user', params: { id: 123 } } 这种写法不会生效,params 必须配合 name 使用。
✘ 滥用 query 替代 params —— 比如把 /product?id=888 若把它作为详情页主入口,会造成 URL 不规范、无法缓存,并且不利于服务端渲染识别。