浅谈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 相关文章推荐
jquery 提交值不为空的元素示例代码
May 10 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
Nov 14 Javascript
js实现单击图片放大图片的方法
Feb 17 Javascript
AngularJS 路由详解和简单实例
Jul 28 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
Dec 28 Javascript
Vue的MVVM实现方法
Aug 16 Javascript
JavaScript实现离开页面前提示功能【附jQuery实现方法】
Sep 26 jQuery
angularjs实现table增加tr的方法
Feb 27 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
Mar 09 Javascript
浅谈ElementUI中switch回调函数change的参数问题
Aug 24 Javascript
Angular Material Icon使用详解
Nov 07 Javascript
微信端调取相册和摄像头功能,实现图片上传,并上传到服务器
May 16 Javascript
一百多行代码实现react拖拽hooks
node中使用shell脚本的方法步骤
详解如何解决使用JSON.stringify时遇到的循环引用问题
vue 中 get / delete 传递数组参数方法
Mar 23 #Vue.js
JavaScript实现页面动态验证码的实现示例
使用Vue.js和MJML创建响应式电子邮件
JS原生实现轮播图的几种方法
You might like
一个PHP操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
php ob_flush,flush在ie中缓冲无效的解决方法
2010/05/09 PHP
php中chdir()函数用法实例
2014/11/13 PHP
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
2016/10/20 PHP
php 调用百度sms来发送短信的实现示例
2018/11/02 PHP
PHP 数组黑名单/白名单实例代码详解
2019/06/04 PHP
Document 对象的常用方法
2009/07/31 Javascript
Js 随机数产生6位数字
2010/05/13 Javascript
JQuery 1.6发布 性能提升,同时包含大量破坏性变更
2011/05/10 Javascript
使用jQuery+HttpHandler+xml模拟一个三级联动的例子
2011/08/09 Javascript
ASP.NET jQuery 实例1(在TextBox里面创建一个默认提示)
2012/01/13 Javascript
js格式化金额可选是否带千分位以及保留精度
2014/01/28 Javascript
node.js中的events.EventEmitter.listenerCount方法使用说明
2014/12/08 Javascript
详解JavaScript的Polymer框架中的通知交互
2015/07/29 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
浅谈javascript中new操作符的原理
2016/06/07 Javascript
详解Angular的双向数据绑定(MV-VM)
2016/12/26 Javascript
你可能不知道的JSON.stringify()详解
2017/08/17 Javascript
vue二级路由设置方法
2018/02/09 Javascript
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
微信小程序后端无法保持session的原因及解决办法问题
2020/03/20 Javascript
对python读取zip压缩文件里面的csv数据实例详解
2019/02/08 Python
python2.7 安装pip的方法步骤(管用)
2019/05/05 Python
python 画函数曲线示例
2019/12/04 Python
Python hashlib常见摘要算法详解
2020/01/13 Python
python重要函数eval多种用法解析
2020/01/14 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
计算Python Numpy向量之间的欧氏距离实例
2020/05/22 Python
中东地区最大的奢侈品市场:The Luxury Closet
2019/04/09 全球购物
英国女性化妆品收纳和家具网站:Beautify
2019/12/07 全球购物
党员创先争优承诺书
2014/03/26 职场文书
模范教师事迹材料
2014/12/16 职场文书
施工安全保证书
2015/05/09 职场文书
开网店计划分析
2019/07/30 职场文书
Redis 持久化 RDB 与 AOF的执行过程
2021/11/07 Redis