之前在工作中开发一个react项目的时候遇到路由传参的问题,当时因为基础不好,解决这个问题用了好久,还产生了一个bug,特此记录一下。

项目中路由跳转使用的是hashRouter,由于是详情页面跳到审批页面,携带的参数比较多,一开始用state传递参数,导致页面刷新参数丢失,最后改用动态路由传参。代码如下:

<HashRouter><div><Route path="/opinion/:id/:reSwapId/:reSwapType/:recordId/:auditId/:approver/:teamId/:busiIds/:mobile/:postName/:hrNo" component={Opinion} /></div>//页面跳转this.props.history.push(`/opinion/id/reSwapId/reSwapType/recordId/auditId/approver/teamId/busiIds/mobile/postName/hrNo`)//参数接收const {opinion, id, reSwapId, reSwapType, recordId, auditId, approver, teamId, busiIds, mobile, postName, hrNo} = this.props.match.params;</HashRouter>

这样看似解决了问题,但是由于有一个参数为空,直接导致审批页面报错,最后把参数转为对象传递。代码如下:

<HashRouter><div><Route path="/opinion/:id/jsonData" component={Opinion} /></div>//页面跳转const opinionParams = {"reSwapId": reSwapId,"reSwapType": reSwapType,"recordId": recordId,"auditId": auditId,"approver": approver,"teamId": teamId,"busiIds": busiIds,"mobile": mobile,"postName": postName,"hrNo": hrNo}const jsonData = JSON.Stringfy(opinionParams);this.props.history.push(`/opinion/${id}/${jsonData}`)//参数接收const jsonData = this.props.match.params.jsonData;const {opinion, id, reSwapId, reSwapType, recordId, auditId, approver, teamId, busiIds, mobile, postName, hrNo} = jsonData;
</HashRouter>

这样问题成功解决,即使参数为空页面也不会报错。

这个问题大佬可能看着很简单,但是当时却花费了我很长时间,看来基础知识储备不足真的很影响开发效率,特别是出现bug自己会毫无头绪,导致白白浪费很长时间。借此机会好好学习总结一下react路由传参。以后遇到此类问题就不怕了。

react路由传参方式

  1. params
Route path="/list/:id" component={List}
<Link to=’/list/2’ >跳转页面</Link>
//页面跳转:
this.props.history.push("/list/2");
//List页面接收:
console.log(this.props.match.params.id)//传递过来的所有参数

优点:页面刷新,参数不会丢失;

缺点:传值太多不方便而且url会变的很长。

2.state

<Route path='/sort ' component={Sort}/>
<Link to={{ path : ' /sort ' , state : { name : 'sunny' }}}>
this.props.history.push({pathname:"/sort ",state : { name : 'sunny' }});
//读取参数:
this.props.location.query.state;

优点:传参优雅,传递参数可传对象;

缺点:使用HashRouter的话,刷新页面,参数会丢失;

3.search

<Route path='/web/departManange ' component={DepartManange}/>
<link to="web/departManange?tenantId=12121212">xxx</Link>
this.props.history.push({pathname:"/web/departManange?tenantId" + row.tenantId});
读取参数用: this.props.location.search

优点:页面刷新,参数不会丢失;

缺点:传值太多url也会变的很长。

4.query

<Route path='/query' component={Query}/>
<Link to={{ path : ' /query' , query : { name : 'sunny' }}}>
this.props.history.push({pathname:"/query",query: { name : 'sunny' }});
读取参数用: this.props.location.query.name

优点:传参优雅,传递参数可传对象;
缺点:刷新地址栏,参数丢失。

react路由传参问题相关推荐

  1. react路由传参的几种方式

    第一种传参方式,动态路由传参 <Link to='/home/dx'>首页</Link><Route path="/home/:name" compo ...

  2. react更改路由入参_react怎么路由传参?

    react路由传参(4种方式) 1.通过params传参(刷新页面后参数不消失,参数会在地址栏显示) 路由页面: //注意要配置 /:id 路由跳转并传递参数:链接方式:XX //或: XXjs方式: ...

  3. react路由嵌套路由及路由传参

    因为react的嵌套路由跟vue比就像屎一样 不好写 所以在使用的时候建议使用react-router-config来配置路由 会相对轻松 第一步 先安装路由依赖 yarn add react-rou ...

  4. react更改路由入参_JavaScript基础教程 react router路由传参

    本篇教程介绍了JavaScript基础教程 react router路由传参,希望阅读本篇文章以后大家有所收获,帮助大家对JavaScript的理解更加深入. < 今天,我们要讨论的是react ...

  5. react路由:路由传参params、search、state

    react路由:路由传参params.search.state(含二级路由和三级路由) 一.准备工作: ​ 1.创建myProject05-router目录 ​ 2.创建清单文件, npm init ...

  6. React通过url传参和通过路由传参

    是基于我写的上一篇文章<用react的路由写一个简单的导航>上面扩展出来的,朋友们可以去康康. 通过url传参的方法有: 1)直接? 接收:this.props.location.sear ...

  7. react 的 路由传参

    1.路由传参 1.动态路由传参 使用prop进行接收 props.match.params.参数名 2.query传参 this.props.history.push({ pathname: '路由' ...

  8. umijs介绍及基本用法、配置式路由、约定式路由、路由传参等

    umiJS Umi 是蚂蚁金服的底层前端框架 中文可发音为乌米,是可扩展的企业级前端应用框架.Umi 以路由为基础的,同时支持配置式路由和约定式路由,保证路由的功能完备.同时有强大的插件扩展各种功能. ...

  9. 几个经常用到的angular路由Router、ActivatedRoute 知识点:嵌套路由、路由跳转、路由传参、路由参数获取

    深度玩家可移步Angular - 常见路由任务 1.嵌套路由 const routes: Routes = [{path: 'first',component: FirstComponent,//同步 ...

最新文章

  1. JS Array 中 shift 和 pop 的妙用
  2. 如何支持亿级用户分流实验?AB实验平台在爱奇艺的实践
  3. Graph Destruction 并查集,图论(500)
  4. win7下不能使用dnw烧写的解决办法——韦东山嵌入式Linux学习笔记05
  5. 设计模式系列-组合模式
  6. Linux批量部署 EXPECT 使用
  7. CRM, C4C和SAP Hybris的数据库层设计
  8. Spring Cloud对Hystrix的支持
  9. OPENCV2.2移植说明
  10. JavaScript split() 方法
  11. 五万以内买什么车合适?
  12. ionic—alert弹出框
  13. [收藏]VUE优秀UI组件库合集
  14. 使用ol,添加图书销售排行榜
  15. 软件工程——NS图,PAD图
  16. mame linux 编译,完美编译街机模拟器MAME(Android版)基于MAME4all
  17. Winform当移入控件时,鼠标变手的通用方法
  18. 抖音账号如何打造,抖音直播带货怎么做:国仁楠哥
  19. 鹏哥手把手带我刷好题 · 编程练习 · I
  20. 【玩转微信公众平台之九】 第一个功能:消息自动回复

热门文章

  1. 一条放弃了计算机的咸鱼的求职之路
  2. 华为交换机ssh思科交换机_配置华为交换机ssh方式登录
  3. 2018校招顺丰测评
  4. vue 引入外部字体(以思源为例)
  5. js数组按中文拼音排序_收藏 | JS开发必须知道的41个技巧
  6. 代码量统计工具,非常有用的小工具
  7. python-如何正确显示中文(日文)以及负号
  8. 关于Windows PowerShell运行其他程序闪退的解决办法
  9. 软件测试的交互,软件测试--前后端数据交互
  10. 田忌赛马贪心算法_贪心算法--田忌赛马问题