浅谈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数组处理方法汇总
Jun 20 Javascript
jQuery中prev()方法用法实例
Jan 08 Javascript
javascript结合fileReader 实现上传图片
Jan 30 Javascript
jquery插件star-rating.js实现星级评分特效
Apr 15 Javascript
javascript实现拖动元素交换位置
Nov 29 Javascript
JavaScript-html标题滚动效果的简单实现
Sep 08 Javascript
jQuery实现获取隐藏div高度的方法示例
Feb 09 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
Sep 26 Javascript
vue中获取滚动table的可视页面宽度调整表头与列对齐(每列宽度不都相同)
Aug 17 Javascript
JS轮播图的实现方法2
Aug 25 Javascript
Javascript实现关闭广告效果
Jan 29 Javascript
vue3不同环境下实现配置代理
May 25 Vue.js
一百多行代码实现react拖拽hooks
node中使用shell脚本的方法步骤
详解如何解决使用JSON.stringify时遇到的循环引用问题
vue 中 get / delete 传递数组参数方法
Mar 23 #Vue.js
JavaScript实现页面动态验证码的实现示例
使用Vue.js和MJML创建响应式电子邮件
JS原生实现轮播图的几种方法
You might like
FleaPHP的安全设置方法
2008/09/15 PHP
php_screw安装使用教程(另一个PHP代码加密实现)
2014/05/29 PHP
php采集内容中带有图片地址的远程图片并保存的方法
2015/01/03 PHP
js 调整select 位置的函数
2008/02/21 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
2013/03/25 Javascript
使用node.js 获取客户端信息代码分享
2014/11/26 Javascript
JavaScript中的toDateString()方法使用详解
2015/06/12 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
全面解析Bootstrap图片轮播效果
2015/12/03 Javascript
jquery获取文档高度和窗口高度汇总
2016/01/25 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
2016/02/17 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
jQuery动态添加元素无法触发绑定事件的解决方法分析
2018/01/02 jQuery
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
vue实现底部菜单功能
2018/07/24 Javascript
移动端滑动切换组件封装 vue-swiper-router实例详解
2018/11/25 Javascript
vue读取本地的excel文件并显示在网页上方法示例
2019/05/29 Javascript
vue中 this.$set的用法详解
2019/09/06 Javascript
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
Python psutil模块简单使用实例
2015/04/28 Python
Python实现队列的方法
2015/05/26 Python
Python之re操作方法(详解)
2017/06/14 Python
python模块之time模块(实例讲解)
2017/09/13 Python
Python编程深度学习计算库之numpy
2018/12/28 Python
python pip源配置,pip配置文件存放位置的方法
2019/07/12 Python
Stubhub英国:购买体育、演唱会和剧院门票
2018/06/10 全球购物
美国医疗用品、医疗设备和家庭保健用品商店:Medical Supply Depot
2018/07/08 全球购物
西雅图电动自行车公司:Rad Power Bikes
2020/02/02 全球购物
师范院校学生自荐信范文
2013/12/27 职场文书
社区党员先进事迹
2014/01/22 职场文书
环保标语大全
2014/06/12 职场文书
2014年社区重阳节活动策划方案
2014/09/16 职场文书
创业计划书之外语培训班
2019/11/02 职场文书
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js
解析探秘fescar分布式事务实现原理
2022/02/28 Java/Android