2.React-Router 编程式导航---(跳转,携带参数跳转)

本文介绍了React-Router的编程式导航,包括如何实现页面跳转和携带参数跳转。在跳转时,可以通过useNavigate钩子函数进行操作,若不想添加历史记录,可以设置replace为true。对于参数传递,提供了searchParams和params两种方式,前者通过问号和参数进行传递,后者则在路由配置的path中添加动态id。

编程式导航-跳转

作用:通过js编程的方式进行路由页面跳转,比如登录页跳转到关于页

语法说明:
1.导入useNavigate钩子函数
2.执行钩子函数得到跳转函数
3.执行跳转函数完成跳转
注意:如果在跳转时不想加历史记录,可以添加额外参数replace为true

编程式导航-携带参数跳转

场景:有些时候不光需要跳转路由还需要传递参数

两种方式
1.searchParams传参 (看个人喜欢)
传参 路径后面加问号以及参数
接参 顶部导入useSearchParams钩子,实例化为一个params数组,使用里面的get方法获取参数

//例如
import {
   
    useSearchParams } from 'react-router-dom';
const [params] = useSearchParams(
### React Router v6 中的路由跳转传参方法 在 React Router v6 中,可以通过多种方式实现在路由跳转时传递参数,并且可以在目标页面轻松获取这些参数。 #### 使用 `navigate` 函数进行路径匹配传参 当执行编程式导航操作时,可以利用 `useNavigate` Hook 提供的 `navigate` 方法来构建带有动态部分的新 URL。例如: ```javascript import { useNavigate } from 'react-router-dom'; function MyComponent() { const navigate = useNavigate(); function handleClick() { // 动态设置路径中的参数值 navigate(`/systemSet/list/${someId}`); } return ( <button onClick={handleClick}>Go to List</button> ); } ``` 这种方式适用于简单的 ID 或名称等作为路径的一部分传递给下一个页面[^2]。 #### 查询字符串形式附加额外数据 对于更复杂的数据结构或者不想改变原有URL模式的情况下,则可以选择通过查询字符串的形式附带信息。这需要用到第三方库如 `qs` 来帮助序列化对象成查询串格式: ```javascript import qs from 'qs'; import { useNavigate } from 'react-router-dom'; function AnotherComponent() { const navigate = useNavigate(); function handleQuerySubmit(data) { let queryString = qs.stringify({ id: data.id, name: data.name }); navigate({ pathname: '/chargingStation/addCharginns', search: '?' + queryString }); } return /* ... */; } ``` 这样做的好处是在不影响整体 URL 设计的前提下增加了灵活性。 #### 利用状态(state)携带隐藏参数 如果希望某些敏感的信息不暴露于浏览器地址栏中,那么还可以考虑采用 `state` 属性来进行跨页间通信。此特性允许开发者向即将访问的目标位置发送任意 JavaScript 对象而不必担心其可见性问题: ```javascript // 发送端 navigate('/chargingStation/addCharginns', { replace: false, state: { id: 100, name: 'zhufeng' } }); // 接收端 (新页面加载完成后立即读取) import { useLocation } from 'react-router-dom'; function TargetPage() { const location = useLocation(); useEffect(() => { console.log(location.state); }, [location]); return /* ... */ ; } ``` 这种方法非常适合处理那些不需要长期保存但在短时间内需要共享的状态信息。 #### 获取并解析路径参数 为了能够接收到上述提到的各种类型的参数,在接收方组件内部应当相应地调用特定 Hooks 进行提取工作。比如要取得定义好的路径变量(`:id`),则需依赖 `useParams()`;而对于查询字符串而言则是依靠 `useSearchParams()` 实现自动解码功能[^3]: ```typescript jsx import { useParams, useSearchParams } from 'react-router-dom'; const MyDocument = () => { const params = useParams(); // 解析 :id 类型参数 const [searchParams] = useSearchParams(); // 处理 ?key=value 形式 return ( <> Document Id is: {params.id}<br/> Query Param Name: {searchParams.get('name')} </> ) }; ``` 综上所述,React Router v6 提供了丰富的 API 支持不同场景下的需求,无论是简单还是复杂的参数交换都能得到妥善解决。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值