react中的路由传参方式总结

本文详细讲解了在前端路由中params、search、query和state四种参数传递方式的使用方法,包括代码实例和注意事项。理解这些区别有助于提升路由控制的灵活性和参数持久性。

1.params传参(刷新页面后参数不消失,参数会在地址栏显示)

代码展示:

/* 向路由组件传递params参数 */
//声明式路由跳转:
<Link to={`/home/message/detail/${id}/${title}`}>{title}</Link>
//或
<Link to={{pathname:`/home/message/detail/${id}/${title}`}}>{title}</Link>
//编程式路由跳转:
this.props.history.push(`/home/message/detail/${id}/${title}`)
//或
this.props.history.push({pathname:`/home/message/detail/${id}/${title}`})
/* 声明接收params参数 */
<Route path="/home/message/detail/:id/:title" component={Detail}/>
// 接收params参数
const {id,title} = this.props.match.params

2.search传参(刷新页面后参数不消失,参数会在地址栏显示)

代码展示:

/* 向路由组件传递search参数 */
//声明式路由跳转
<Link to={`/home/message/detail/?id=${id}&title=${title}`}>{title}</Link>
//或
<Link to={{pathname:`/home/message/detail/?id=${id}&title=${title}`}}>{title}</Link>
//编程式路由跳转:
this.props.history.push(`/home/message/detail?id=${id}&title=${title}`)
//或
this.props.history.push({pathname:`/home/message/detail?id=${id}&title=${title}`})
/* search参数无需声明接收,正常注册路由即可 */
<Route path="/home/message/detail" component={Detail}/>
// 接收search参数
import qs from 'querystring'
const {search} = this.props.location
const {id,title} = qs.parse(search.slice(1))

备注:获取到的search是urlencoded编码字符串,需要借助querystring解析

项目安装 querystring插件

npm i -save-dev querystring

在需要接收参数的页面引入

import qs from 'querystring'

使用qs解析编码

const {search} = this.props.location
const {id,title} = qs.parse(search.slice(1))

3.query传参(刷新页面后参数消失,参数不会在地址栏显示)

代码展示:

/* 向路由组件传递query参数 */
//声明式路由跳转
<Link to={{pathname:'/home/message/detail',query:{id,title}}}>{title}</Link>
//编程式路由跳转
this.props.history.push({pathname:`/home/message/detail`,query:{id,title}})
/* query参数无需声明接收,正常注册路由即可 */
<Route path="/home/message/detail" component={Detail}/>
//接收query参数
const {id,title} = this.props.location.query

4.state传参(刷新页面后参数不会消失,参数也不会在地址栏显示)

代码展示:

/* 向路由组件传递state参数 */
//声明式路由跳转
<Link to={{pathname:'/home/message/detail',state:{id,title}}}>{title}</Link>
//编程式路由跳转
this.props.history.push(`/home/message/detail`,{id,title})
//或
this.props.history.push({pathname:`/home/message/detail`,state:{id,title}})
/* query参数无需声明接收,正常注册路由即可 */
<Route path="/home/message/detail" component={Detail}/>
//接收query参数
const {id,title} = this.props.location.state
React Hooks是一种React的函数式编程方式,用于在函数组件中使用React的功能。在React中,有多种方式可以实现路由传参,其中包括params、query、state和使用React Router提供的hooks。 1. 使用params方式进行路由传参:params方式是通过在路由路径中定义参数来传递数据。可以在路由配置中定义参数,并通过路由组件的props或者useParams hook来获取传递的参数值。这种方式的优点是直观、简洁,适合传递较少的数据。但是缺点是参数是直接暴露在URL中,可能会导致安全性问题和浏览器历史记录的混乱。 2. 使用query方式进行路由传参:query方式是通过在URL的查询字符串中传递数据。可以使用React Router提供的useLocation hook来获取查询字符串并解析参数。这种方式的优点是可以传递任意数量的参数,并且参数值可以是任意类型。但是缺点是URL会变得较长,不够直观,且需要手动解析参数。 3. 使用state方式进行路由传参:state方式是通过将参数保存在组件状态中进行传递。可以使用React Router提供的useLocation hook来获取传递的参数值。这种方式的优点是可以传递复杂的数据结构,并且参数值不会暴露在URL中。但是缺点是参数值只在页面刷新后会丢失。 4. 使用React Router提供的hooks进行路由传参React Router还提供了一些hooks,如useParams、useLocation和useMatch等,可以方便地获取路由参数。useParams用于获取params方式传递的参数,useLocation用于获取query方式传递的参数,useMatch用于获取匹配当前URL的路由信息。 根据具体需求和场景,选择合适的方式进行路由传参。如果传递的数据较少且不涉及敏感信息,可以使用params方式;如果传递的参数较多或需要保护敏感信息,可以使用query方式或state方式;如果需要方便地获取路由参数,可以使用React Router提供的hooks。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [react及hook路由传参](https://blog.csdn.net/weixin_46449470/article/details/120370287)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [ReactRouter6路由传值hooks](https://blog.csdn.net/phaple/article/details/128734513)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值