学习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 临时数据、不暴露给用户的数据
相关推荐
军军君019 分钟前
Three.js基础功能学习十六:智能黑板实现实例三
前端·javascript·css·vue.js·3d·前端框架·threejs
海上彼尚14 分钟前
SVG矢量图形快速入门
前端·html5
管鲍考试学习系统17 分钟前
在线考试系统是什么?功能、部署、应用场景全详解(管鲍考试学习系统 V8.0 深度版)
学习·架构·在线考试·考试系统·培训考试·考试练习
嗷o嗷o21 分钟前
Android App Functions 深入理解
前端
CheerWWW24 分钟前
深入理解计算机系统——位运算、树状数组
笔记·学习·算法·计算机系统
UXbot28 分钟前
AI原型设计工具评测:从创意到交互式Demo,5款产品全面解析
前端·ui·设计模式·ai·ai编程·原型模式
落魄江湖行29 分钟前
硅基同事埋的坑,我用2小时才填平:Nuxt 4 路由踩坑:可选参数 [[id]] 与 [id] 的区别
前端
一勺菠萝丶35 分钟前
管理后台使用手册在线预览与首次登录引导弹窗实现
java·前端·数据库
军军君0135 分钟前
Three.js基础功能学习十四:智能黑板实现实例一
前端·javascript·css·typescript·前端框架·threejs·智能黑板
小村儿38 分钟前
连载05-Claude Skill 不是抄模板:真正管用的 Skill,都是从实战里提炼出来的
前端·后端·ai编程