浅谈react路由传参的几种方式


Posted in Javascript onMarch 23, 2021

第一种传参方式,动态路由传参

通过设置link的path属性,进行路由的传参,当点击link标签的时候,会在上方的url地址中显示传递的整个url

<Link to='/home?name=dx'>首页</Link>

如果想真正获取到传递过来的参数,需要在对应的子组件中
this.props.location.search 获取字符串,再手动解析

因为传参能够被用户看见,传递获取比较麻烦,所以不推荐

第二种传参方式,隐式路由传参

<Link to={{
     pathname: 'about',
     state: {
      name: 'dx'
     }
    }}>关于</Link>

所谓隐式路由传参,就是传参的信息不回暴露在url中,当点击该link标签,想要获取到传递的参数,就在对应的路由组件中,通过this.props.location.state获取即可

推荐使用,比较安全,获取传递参数都比较方便

第三种传参方式 组件间传参

何时使用?
当一个路由组件需要接收来自父组件传参的时候

改造route标签通过component属性激活组件的方式
正常情况下的route标签在路由中的使用方式

//简洁明了,但没办法接收来自父组件的传参
<Route path='/test' component={Test}></Route>

改造之后

<Link to='/test'>测试</Link>
<Route path='/test' render={(routeProps) => {
 //routeProps就是路由组件传递的参数
     return (
     //在原先路由组件参数的情况,扩展绑定父组件对子组件传递的参数
      <Test {...routeProps} name='dx' age={18} />
     )
 }}></Route> 

当点击link标签时,通过在对应的test子组件中,this.props获取来自父组件传递的参数和路由组件自带的参数
强烈推荐,传递参数略微有些麻烦,接收参数十分方便,并且仍然可以接收路由组件自带的参数,安全,不会被用户看见

第四种传参方式 withRouter 高阶组件给子组件绑定路由参数

withRouter 何时使用?
想要在某个子组件中获取路由的参数,必须得使用路由中的route标签的子组件才能被绑定上路由的参数。

为了解决不通过route标签绑定的子组件获取路由参数的问题,需要使用withRouter

一般用在返回首页,返回上一级等按钮上

import React from 'react';
import BackHome from './backhome';
export default class Test extends React.Component {
 render () {
  console.log(this.props)
  return (
   <div>
    这是测试的内容
//返回首页的按钮不是通过route标签渲染的,所以该子组件的this.props中没有路由参数
    <BackHome>返回首页</BackHome> 
   </div>
  )
 }
}
import React from 'react';
//导入withRoute
import {withRouter} from 'react-router-dom';
class BackHome extends React.Component {
 goHome = () => {
  //必须在使用withRouter的情况下,该组件在this.props中才有路由参数和方法
  //否则,会报错
  this.props.history.push({
   pathname: '/home',
   state: {
    name: 'dx' //同样,可以通过state向home路由对应的组件传递参数
   }
  })
 }
 render () {
  return (
   <button onClick={this.goHome}>this.props.children</button>
  )
 }
}
//导出的时候,用withRouter标签将backHome组件以参数形式传出
export default withRouter(BackHome)

当你需要使用的时候,就很重要,所以还是比较推荐。

Javascript 相关文章推荐
greybox——不开新窗口看新的网页
Feb 20 Javascript
getComputedStyle与currentStyle获取样式(style/class)
Mar 19 Javascript
jQuery Ajax中的事件详细介绍
Apr 16 Javascript
jQuery实现仿新浪微博浮动的消息提示框(可智能定位)
Oct 10 Javascript
基于JQuery实现图片轮播效果(焦点图)
Feb 02 Javascript
jQuery的框架介绍
May 11 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
Feb 19 Javascript
js实现日期显示的一些操作(实例讲解)
Jul 27 Javascript
React 使用recharts实现散点地图的示例代码
Dec 07 Javascript
微信接入之获取用户头像的方法步骤
Sep 23 Javascript
vuex入门最详细整理
Mar 04 Javascript
js实现点击按钮随机生成背景颜色
Sep 05 Javascript
一百多行代码实现react拖拽hooks
node中使用shell脚本的方法步骤
详解如何解决使用JSON.stringify时遇到的循环引用问题
vue 中 get / delete 传递数组参数方法
Mar 23 #Vue.js
JavaScript实现页面动态验证码的实现示例
使用Vue.js和MJML创建响应式电子邮件
JS原生实现轮播图的几种方法
You might like
关于php连接mssql:pdo odbc sql server
2011/07/20 PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
2013/07/01 PHP
mac下Apache + MySql + PHP搭建网站开发环境
2014/06/02 PHP
php实现简单文件下载的方法
2015/01/30 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
对PHP依赖注入的理解实例分析
2016/10/09 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
jquery等待效果示例
2014/05/01 Javascript
js调用百度地图及调用百度地图的搜索功能
2015/09/07 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
2015/11/25 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
2016/01/13 Javascript
实例详解AngularJS实现无限级联动菜单
2016/01/15 Javascript
基于jquery编写的放大镜插件
2016/03/23 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
2017/05/05 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
2017/05/26 Javascript
详解nodejs中express搭建权限管理系统
2017/09/15 NodeJs
微信小程序之swiper轮播图中的图片自适应高度的方法
2018/04/23 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
js回溯法计算最佳旅行线路代码实例
2019/09/11 Javascript
JS前后端实现身份证号验证代码解析
2020/07/23 Javascript
有关wxpython pyqt内存占用问题分析
2014/06/09 Python
Python如何快速上手? 快速掌握一门新语言的方法
2017/11/14 Python
python利用socketserver实现并发套接字功能
2018/01/26 Python
芝加哥牛排公司:Chicago Steak Company
2018/10/31 全球购物
EJB与JAVA BEAN的区别
2016/08/29 面试题
会计主管岗位职责范文
2013/11/08 职场文书
户外亲子活动策划方案
2014/02/07 职场文书
《愚公移山》教学反思
2014/02/20 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
大学生军训自我鉴定范文
2014/09/18 职场文书
2014光棍节大学生联谊活动方案
2014/10/10 职场文书
学前班学生评语
2014/12/29 职场文书
综合素质评价思想道德自我评价
2015/03/09 职场文书
自我推荐信格式模板
2015/03/24 职场文书
房地产公司工程部经理岗位职责
2015/04/09 职场文书
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS