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

React中form action="/search"提交时如何捕获URL搜索参数

问题原因

你获取失败的核心原因是用错了对应的hook,和URL里的?符号、表单action配置都没有关系:

  • useParams的作用是提取路由路径中的动态段参数,比如路由配置为/search/:keyword时,访问路径/search/前端教程里的「前端教程」属于路径参数,才能通过useParams拿到。
  • 你URL中?后面拼接的是查询字符串参数(Search Params),不属于路径匹配的段内容,本来就不会出现在useParams的返回结果里。
  • 你通过表单GET方式提交跳转搜索页的实现完全符合Web原生规范,不需要修改表单的action配置,这种写法天然支持浏览器后退/刷新保留搜索状态、无JS环境兼容,比手动拦截表单提交写跳转逻辑的方案更合理。
正确获取方式

根据你使用的React Router版本选择对应写法即可:

React Router v6(当前主流版本)

使用官方提供的useSearchParams hook直接读取查询参数:

// 引入hook
import { useSearchParams } from 'react-router-dom';

function SearchResultPage() {
  // 调用hook获取查询参数对象
  const [searchParams] = useSearchParams();
  // 通过get方法读取指定key的参数值
  const searchKeyword = searchParams.get('q');

  return (
    <div>
      <h1>搜索结果</h1>
      <p>当前搜索关键词:{searchKeyword}</p>
    </div>
  )
}

React Router v5 旧版本

使用useLocation拿到URL的查询字符串部分,再通过原生URLSearchParams解析即可:

// 引入hook
import { useLocation } from 'react-router-dom';

function SearchResultPage() {
  const location = useLocation();
  // location.search就是?开头的查询字符串,直接传入解析
  const searchParams = new URLSearchParams(location.search);
  const searchKeyword = searchParams.get('q');

  return (
    <div>
      <h1>搜索结果</h1>
      <p>当前搜索关键词:{searchKeyword}</p>
    </div>
  )
}

提示:如果参数存在多个同名值(比如多选筛选条件?tag=js&tag=css),可以用searchParams.getAll('tag')获取所有值组成的数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:09:20