学习React-24-路由传参

动态路由
复制代码
适用于:参数是URL 的一部分,如 /user/123

定义参数

ts 复制代码
<Route path="/user/:id" element={<User />} />

获取参数

ts 复制代码
import { useParams } from 'react-router';

function User() {
  const { id } = useParams();
  return <div>User ID: {id}</div>;
}
查询字符串(query string)
复制代码
适用于:可选参数,如 /search?keyword=react

定义参数

ts 复制代码
<NavLink to="/about?hobby=篮球&job=歌手&repre=你干嘛~">About</NavLink>
// 或者编程式跳转
navigate('/search?keyword=react');

获取参数

ts 复制代码
export default function About() {
	// useSearchParams 获取参数对象,提供修改参数的方法
  const [searchParams, setSearchParams] = useSearchParams();
  const job = searchParams.get("job");
  const hobby = searchParams.get("hobby");
  const repre = searchParams.get("repre");
  return (
    <div>
      <h1>About</h1>
      <NavLink to="/home">Home</NavLink>
      <p>工作:{job}</p>
      <p>爱好:{hobby}</p>
      <p>代表:{repre}</p>
      <button onClick={() => setSearchParams(prev => {
        prev.set("repre", "你干嘛~ 哎呦~ 你干嘛~~");
        return prev;
      })}>开始吟唱</button>
    </div>
  );
}
状态传递(state)
复制代码
适用于:不暴露在 URL 中的参数,比如跳转时带对象或敏感数据。

定义参数

ts 复制代码
<NavLink to="/home" state={{name: '黑子', age: 18}}>Home</NavLink>
//或者编程式
 navigate('/profile', { state: {name: '黑子', age: 18} });

获取参数

ts 复制代码
export default function Home() {
  const location = useLocation();
  return (
    <div>
      <h1>Home</h1>
      <NavLink to="/about?hobby=篮球&job=歌手&repre=你干嘛~">About</NavLink>
      <div>
        <p>姓名:{location.state.name}</p>
        <p>年龄:{location.state.age}</p>
      </div>
    </div>
  );
}

注意:state 数据在页面刷新后会丢失,不适合持久化参数。

对比
方式 是否暴露在 URL 是否可刷新保留 适用场景
useParams ✅ ✅ RESTful 路由参数
useSearchParams ✅ ✅ 筛选、分页、搜索关键词
state ❌ ❌ 临时数据、不暴露给用户的数据
相关推荐
Star(up up up)几秒前
Docker系列---Dockerfile镜像文件
人工智能·经验分享·学习·程序人生·docker·容器·github
January12078 分钟前
【AI方法笔记】2026-11-02:模型流式吐 JSON 时,前端会遇到四种崩法
前端·人工智能·笔记·json
asdzx6712 分钟前
C# 操作 PDF 元数据:从属性写入到字段提取的完整流程
前端·pdf·c#
吹什么轩29 分钟前
constexpr 完全指南:从 const 的两种含义,到编译期计算的四次演进
java·前端·javascript
外收内放1 小时前
ENSP学习记录(4)
服务器·学习·智能路由器
Bruce_Liuxiaowei1 小时前
前端校验登录态,等于没校验——一次应急广播终端高危漏洞的发现与报送
运维·前端·安全
Meta Luo1 小时前
AI 时代,Web 自动化测试该怎么做?
前端·人工智能·playwright 替代工具·无代码自动化测试工具·低代码 ui 自动化测试·web 回归测试工具
去伪存真1 小时前
AI Agent 性能评估指标与自动化测试落地方案
前端·agent
承渊政道1 小时前
Linux网络学习【五种IO模型与⾮阻塞IO】
linux·网络·学习·ubuntu·io模型·非阻塞io
MaAidan2 小时前
用 Agent 排查线上问题:SLS 日志分析 + DB/Redis 数据验证,一条链路搞清楚
前端·bootstrap·html