浅谈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实例收集(20个)
Apr 21 Javascript
javascript 实用的文字链提示框效果
Jun 30 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
Sep 19 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
Sep 22 Javascript
javascript实现密码验证
Nov 10 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
Nov 25 Javascript
Linux下为Node.js程序配置MySQL或Oracle数据库的方法
Mar 19 Javascript
JavaScript实现in-place思想的快速排序方法
Aug 07 Javascript
利用js编写响应式侧边栏
Sep 17 Javascript
jQuery插件HighCharts实现气泡图效果示例【附demo源码】
Mar 13 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
Dec 09 Javascript
在vue中使用回调函数,this调用无效的解决
Aug 11 Javascript
一百多行代码实现react拖拽hooks
node中使用shell脚本的方法步骤
详解如何解决使用JSON.stringify时遇到的循环引用问题
vue 中 get / delete 传递数组参数方法
Mar 23 #Vue.js
JavaScript实现页面动态验证码的实现示例
使用Vue.js和MJML创建响应式电子邮件
JS原生实现轮播图的几种方法
You might like
php正则表达式使用的详细介绍
2013/04/27 PHP
深入解析php中的foreach函数
2013/08/31 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十)
2014/06/24 PHP
避免Smarty与CSS语法冲突的方法
2015/03/02 PHP
thinkPHP中session()方法用法详解
2016/12/08 PHP
自制PHP框架之模型与数据库
2017/05/07 PHP
用AJAX返回HTML片段中的JavaScript脚本
2010/01/04 Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
2014/07/18 Javascript
JQuery实现展开关闭层的方法
2015/02/17 Javascript
javascript基本包装类型介绍
2015/04/10 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
jQuery实现可展开合拢的手风琴面板菜单
2015/09/15 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
vue中添加mp3音频文件的方法
2018/03/02 Javascript
WebPack配置vue多页面的技巧
2018/05/15 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
2018/09/18 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
解决layui数据表格排序图标被超出的表头挤出去的问题
2019/09/19 Javascript
解决vue 子组件修改父组件传来的props值报错问题
2019/11/09 Javascript
JavaScript实现随机点名程序
2020/03/25 Javascript
vue项目实现多语言切换的思路
2020/09/17 Javascript
[05:40]DOTA2荣耀之路6:Wings最后进攻
2018/05/30 DOTA
Python实时获取cmd的输出
2015/12/13 Python
djano一对一、多对多、分页实例代码
2019/08/16 Python
python接口调用已训练好的caffe模型测试分类方法
2019/08/26 Python
django haystack实现全文检索的示例代码
2020/06/24 Python
一款基于css3的列表toggle特效实例教程
2015/01/04 HTML / CSS
加拿大租车网站:Enterprise Rent-A-Car
2018/07/26 全球购物
高级电工工作职责
2013/11/21 职场文书
财务管理个人自荐书范文
2013/11/24 职场文书
党风廉设责任书
2014/04/16 职场文书
作文评语集锦大全
2014/04/23 职场文书
乡领导班子四风问题对照检查材料
2014/09/25 职场文书
2015年乡镇人大工作总结
2015/04/22 职场文书
开除通知书范本
2015/04/25 职场文书
聊聊SpringBoot自动装配的魔力
2021/11/17 Java/Android