浅谈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 相关文章推荐
脚本吧 - 幻宇工作室用到js,超强推荐share.js
Dec 23 Javascript
SUN的《AJAX与J2EE》全文译了
Feb 23 Javascript
js对象的构造和继承实现代码
Dec 05 Javascript
jQuery ajax(复习)—Baidu ajax request分离版
Jan 24 Javascript
jquery向上向下取整适合分页查询
Sep 06 Javascript
28个常用JavaScript方法集锦
Jan 14 Javascript
JavaScript中的fontsize()方法使用详解
Jun 08 Javascript
详解微信小程序 template添加绑定事件
Jun 23 Javascript
微信小程序之发送短信倒计时功能
Aug 30 Javascript
vue 组件的封装之基于axios的ajax请求方法
Aug 11 Javascript
使用elementUI实现将图片上传到本地的示例
Sep 04 Javascript
js仿淘宝放大镜效果
Dec 28 Javascript
一百多行代码实现react拖拽hooks
node中使用shell脚本的方法步骤
详解如何解决使用JSON.stringify时遇到的循环引用问题
vue 中 get / delete 传递数组参数方法
Mar 23 #Vue.js
JavaScript实现页面动态验证码的实现示例
使用Vue.js和MJML创建响应式电子邮件
JS原生实现轮播图的几种方法
You might like
不要轻信 PHP_SELF的安全问题
2009/09/05 PHP
php实现删除指定目录下相关文件的方法
2014/10/20 PHP
php的mssql数据库连接类实例
2014/11/28 PHP
简单JS代码压缩器
2006/10/12 Javascript
JQuery从头学起第三讲
2010/07/06 Javascript
JQuery 图片滚动轮播示例代码
2014/03/24 Javascript
jQuery 取值、赋值的基本方法整理
2014/03/31 Javascript
事件委托与阻止冒泡阻止其父元素事件触发
2014/09/02 Javascript
JavaScript验证Email(3种方法)
2015/09/21 Javascript
javascript的 {} 语句块详解
2016/02/27 Javascript
老生常谈jacascript DOM节点获取
2017/04/17 Javascript
使用 jQuery 实现表单验证功能
2017/07/05 jQuery
JavaScript中立即执行函数实例详解
2017/11/04 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
2018/04/08 Javascript
webstorm添加*.vue文件支持
2018/05/08 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
微信小程序实现两边小中间大的轮播效果的示例代码
2018/12/07 Javascript
稍微学一下Vue的数据响应式(Vue2及Vue3区别)
2019/11/21 Javascript
Python向MySQL批量插数据的实例讲解
2018/03/31 Python
Python离线安装PIL 模块的方法
2019/01/08 Python
Python实现将HTML转成PDF的方法分析
2019/05/04 Python
python安装pil库方法及代码
2019/06/25 Python
Pycharm远程调试原理及具体配置详解
2019/08/08 Python
python识别文字(基于tesseract)代码实例
2019/08/24 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
浅谈matplotlib中FigureCanvasXAgg的用法
2020/06/16 Python
Pytho爬虫中Requests设置请求头Headers的方法
2020/09/22 Python
CSS中的字体大小设置属性总结
2016/05/24 HTML / CSS
Html5新特性用canvas标签画多条直线附效果截图
2014/06/30 HTML / CSS
Troy-Bilt官网:草坪割草机、吹雪机、分蘖机等
2019/02/19 全球购物
画展邀请函
2015/01/31 职场文书
2015年五一劳动节慰问信
2015/03/23 职场文书
起诉书格式范文
2015/05/20 职场文书
2015年社区反邪教工作总结
2015/10/14 职场文书
导游词之烟台威海蓬莱
2019/11/14 职场文书
MYSQL 无法识别中文的永久解决方法
2021/06/03 MySQL