You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

react-router-dom中useParams钩子获取URL查询参数返回undefined求助

错误原因说明
  1. useParams() 适用场景错误
    useParams() 是用来读取路由定义中声明的路径动态参数,只有你在路由配置中写为类似<Route path="/cart/:id/:qty/:size" element={<CartScreen/>}/>的形式时,才能通过useParams()拿到对应值,它无法读取URL中?之后的查询字符串参数,所以你第一次调用全返回undefined。
  2. useRouter() 适用场景错误
    useRouter() 是Next.js框架专属的路由钩子,如果你使用的是React生态的react-router-dom做路由管理,没有内置这个API,自然读取不到query属性下的参数。
正确获取查询参数的方案

如果你使用 react-router-dom v6(主流版本)

直接用官方提供的useSearchParams钩子处理查询参数,示例代码如下:

import { useSearchParams } from "react-router-dom";

export default function CartScreen(props) {
  // 第一个返回值就是查询参数实例
  const [searchParams] = useSearchParams();
  
  const id = searchParams.get("id");
  const qty = searchParams.get("qty");
  const size = searchParams.get("size");

  console.log("id : " + id);
  console.log("qty : " + qty);
  console.log("size : " + size);
  // 后续业务逻辑
}

如果你使用 react-router-dom v5 及更早版本

配合useLocation和原生URLSearchParams解析即可:

import { useLocation } from "react-router-dom";

export default function CartScreen(props) {
  const { search } = useLocation();
  const searchParams = new URLSearchParams(search);
  
  const id = searchParams.get("id");
  const qty = searchParams.get("qty");
  const size = searchParams.get("size");
  // 后续业务逻辑
}
补充说明

你看到console多次打印属于React组件的正常重渲染行为,组件挂载、内部状态更新、父组件重渲染都可能触发组件重新执行,只要最终参数读取正确就无需处理。

内容的提问来源于stack exchange,提问作者Guillaume Ayad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:06:04