基于React路由跳转的几种方式

目录
  • React路由跳转的几种方式
    • 1. params形式
    • 2. 使用state的形式
  • React路由跳转传参问题
    • 使用Link传参
    • url传参
    • 隐式传参

React路由跳转的几种方式

注意: 这里使用的react-router-dom是版本5以上,路由形式是history模式

react-router-dom文档,其中依赖包history的github地址

1. params形式

路由跳转后,参数会显示在地址栏

跳转的方法是使用

history.push({pathname: '/personal', search: 'test=22222'})

其中search键对应的值就是拼接在地址栏的数据

import React from 'react'
import { useHistory } from 'react-router-dom'
export default ()=> {
	const history = useHistory()
	// 页面跳转方法
	history.push({pathname: '/personal', search: 'test=22222'})
	return 123
}

接收的方法。数据都是存储在useLocation中的search获取

import React from 'react'
import { useLocation } from 'react-router-dom'
export default ()=> {
	const location = useLocation()
	// 页面跳转方法
	console.log(location, 'props')
	return 123
}

2. 使用state的形式

页面刷新不会丢失数据,并且地址栏也看不到数据 跳转的方法是使用

history.push({pathname: '/personal', state: {test: 'dashboard'}})

其中search键对应的值就是拼接在地址栏的数据

import React from 'react'
import { useHistory } from 'react-router-dom'
export default ()=> {
	const history = useHistory()
	// 页面跳转方法
	history.push({pathname: '/personal', state: { test: 'dashboard' }})
	return 123
}

接收的方法。数据都是存储在useLocation中的search获取

import React from 'react'
import { useLocation } from 'react-router-dom'
export default ()=> {
	const location = useLocation()
	// 页面跳转方法
	console.log(location, 'props')
	return 123
}

React路由跳转传参问题

使用Link传参

1.引入Link

import { Link } from “react-router-dom”

2.Llink上携带传递的参数,携带的参数以对象形式

<Link to={
            { pathname: "/XXX", //xxx为跳转到的路径
              state: { title: this.state.exam.title, actionCode: this.state.exam.actionCode } 
            }
          } >切换考试科目 <i className="iconfont icon-jiantou"></i></Link>

2.1 接收参数(类组件)

componentDidMount() {
        console.log(this.props.location.state.XXX);   //xxx指state对象中的键名    
    }

2.2接收参数(函数式组件)

function Fast(props) {
     ...
    useEffect(() => {
        console.log(props.location.state.XXX);//xxx指state对象中的键名
    })
}

url传参

1.url带参传参

<button onClick={()=>{this.props.history.push('/detail/88')}}>跳往详情页</button>`

2.接收参数

//  react-router-dom是通过“/:”去匹配url传递的参数 ,即id获取到上面的url传过来的88
<Route exact path="/detail/:id" component={Detail}></Route>
//页面接收参数
componentDidMount(){
  console.log(this.props.match.params);
}

隐式传参

3.1 state方法

页面传参

state方法传参:参数地址栏不显示,刷新地址栏,参数不丢失

<button onClick={()=>{this.props.history.push({
    pathname: '/detail', //要跳转到的路径
    state: {  //参数地址栏不显示,刷新地址栏,参数不丢失
      id: 456
    }
  })}}>去详情页</button>

接收参数

<Route exact path="/detail" component={Detail}></Route>
//页面接收参数
componentDidMount(){
    console.log(this.props.history.location.state);
}

3.2 query方法

页面传参

query方法传参:参数地址栏不显示,刷新地址栏,参数丢失

<button onClick={()=>{this.props.history.push({
    pathname: '/detail', //要跳转到的路径
    query: {  
      id: 456
    }
  })}}>去详情页</button>

接收参数

<Route exact path="/detail" component={Detail}></Route>
//页面接收参数
componentDidMount(){
    console.log(this.props.history.location.query);
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • react 跳转后路由变了页面没刷新的解决方案

    目录 问题 解决方案 问题 这样的问题貌似原因还挺多的,我的问题是带参数的url不能刷新,router 5.0版本 ,使用withRouter关联组件进行页面跳转 如下所示 路由代码 解决方案 在路由组件上最上层元素上加一个key增加路由的识别度,因为普通的跳转是根据path来识别的,但是path带上参数时,路由无法精确识别.不过,在跳转页面的时候,每个地址都会在localtion对象里添加一个key.如下打印 // 组件挂载 componentDidMount() { console.log(

  • 详解各版本React路由的跳转的方法

    前言 React-Router已经发布了多个版本,利用路由导航的使用方法都不大一样,在这里总结一下. React-Router 2.0.0 版本 2.0.0版本需要使用browserHistory进行跳转,具体参考一下代码: import { browserHistory } from 'react-router' browserHistory.push('/path') React-Router 2.4.0版本以上 React-Router 2.4.0版本以上,可以通过mixin的方法,使组件

  • react-router v4如何使用history控制路由跳转详解

    前言 距离React Router v4 正式发布也已经挺久了,这周把一个React的架子做了升级,之前的路由用的还是v2.7.0版的,所以决定把路由也升级下,正好"尝尝鲜"... 江湖传言,目前官方同时维护 2.x 和 4.x 两个版本.(ヾ(。ꏿ﹏ꏿ)ノ゙咦,此刻相信机智如我的你也会发现,ReactRouter v3 去哪儿了?整丢了??巴拉出锅了???敢不敢给我个完美的解释!?)事实上 3.x 版本相比于 2.x 并没有引入任何新的特性,只是将 2.x 版本中部分废弃 API 的

  • react-router JS 控制路由跳转实例

    Link组件用于正常的用户点击跳转,但是有时还需要表单跳转.点击按钮跳转等操作.这些情况怎么跟React Router对接呢? 下面是一个表单. <form onSubmit={this.handleSubmit}> <input type="text" placeholder="userName"/> <input type="text" placeholder="repo"/> <

  • react实现同页面三级跳转路由布局

    本文实例为大家分享了react实现同页面三级跳转路由布局的具体代码,供大家参考,具体内容如下 一级路由+布局组件: //嵌套路由小案例 布局页面一级路由 import React from 'react' import {BrowserRouter as Router, Route, Link} from 'react-router-dom' //引入路由要用的组件 import Index from './Index' //二级路由 首页 import Video from './Video'

  • React利用路由实现登录界面的跳转

    上一篇在配置好了webpack和react的环境后,接下来开始写登录界面,以及接下来的跳转到主页的功能. 1.首先看一下总体的目录结构. 因为很多时候在看别人写的例子的时候因为目录结构不熟悉后边会出现意想不到的岔子. 2.大体流程: 1)webpack配置入口文件src/index.js 2)运行index.html后首先加载入口文件src/index.js 3)加载路由表src/router/index.js 4)根据路由表中的配置会首先加载登录界面src/login.js 5)当在登录界面登

  • 基于React路由跳转的几种方式

    目录 React路由跳转的几种方式 1. params形式 2. 使用state的形式 React路由跳转传参问题 使用Link传参 url传参 隐式传参 React路由跳转的几种方式 注意: 这里使用的react-router-dom是版本5以上,路由形式是history模式 react-router-dom文档,其中依赖包history的github地址 1. params形式 路由跳转后,参数会显示在地址栏 跳转的方法是使用 history.push({pathname: '/person

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

    第一种传参方式,动态路由传参 通过设置link的path属性,进行路由的传参,当点击link标签的时候,会在上方的url地址中显示传递的整个url <Link to='/home?name=dx'>首页</Link> 如果想真正获取到传递过来的参数,需要在对应的子组件中 this.props.location.search 获取字符串,再手动解析 因为传参能够被用户看见,传递获取比较麻烦,所以不推荐 第二种传参方式,隐式路由传参 <Link to={{ pathname: '

  • Vue路由跳转的4种方式小结

    目录 1. 标签路由 router-link 2.编程式路由 this.$router.push() 3.this.$router.replace()(与this.$router.push()类似) 4.this.$router.go(n) 5.this.$router.push().this.$router.replace().this.$router.go(n)区别 router-view 实现路由内容的地方,引入组件时写到需要引入的地方,需要注意的是,使用vue-router控制路由则必须

  • vue路由跳转传递参数的方式总结

    日常业务中,路由跳转的同时传递参数是比较常见的,传参的方式有三种: 1)通过动态路由方式 //路由配置文件中 配置动态路由 { path: '/detail/:id', name: 'Detail', component: Detail } //跳转时页面 var id = 1; this.$router.push('/detail/' + id) //跳转后页面获取参数 this.$route.params.id 2)通过query属性传值 //路由配置文件中 { path: '/detail

  • 详解Vue路由传参的两种方式query和params

    Vue路由传参的两种方式query和params 一.router-link 1. 不带参数 <router-link :to="{name:'home'}"> <router-link :to="{path:'/home'}"> //name,path都行, 建议用name // 注意:router-link中链接如果是'/'开始就是从根路由开始,如果开始不带'/',则从当前路由开始. 2.带参数 <router-link :to=&

  • 基于TensorFlow中自定义梯度的2种方式

    前言 在深度学习中,有时候我们需要对某些节点的梯度进行一些定制,特别是该节点操作不可导(比如阶梯除法如 ),如果实在需要对这个节点进行操作,而且希望其可以反向传播,那么就需要对其进行自定义反向传播时的梯度.在有些场景,如[2]中介绍到的梯度反转(gradient inverse)中,就必须在某层节点对反向传播的梯度进行反转,也就是需要更改正常的梯度传播过程,如下图的 所示. 在tensorflow中有若干可以实现定制梯度的方法,这里介绍两种. 1. 重写梯度法 重写梯度法指的是通过tensorf

  • .Net基于Thread实现自旋锁的三种方式

    基于Thread.SpinWait实现自旋锁 实现原理:基于Test--And--Set原子操作实现 使用一个数据表示当前锁是否已经被获取 0表示未被索取,1表示已经获取 获取锁时会将_lock的值设置为1 然后检查修改前的值是否等于0, 优点: 不使用Thread.SpinWait方法,重试的方法体会为空,CPU会使用它的最大性能来不断的进行赋值和比较指令,会浪费很大的性能,Thread.SpinWait提示CPU当前正在自旋锁的循环中,可以休息若干个时间周期 使用自旋锁需要注意的问题,自旋锁

  • 浅谈React Native 传参的几种方式(小结)

    在React Native 中由于业务的需要, 我们往往要在诸多的页面间,组件之间做一些参数的传递与管理, 在这里我总结了几大经过验证,稳定好用的方式给大家 React Navigation 导航传值 推荐指数: ♥ ♥ ♥ ♥ ♥ 适用范围: 相互跳转的页面间传值 兼容性: IOS/Android 原理: React Navigation 为页面的 props 上挂载了 navigation 对象, 可用来做路由跳转,在做页面跳转时可以携带参数/回调方法前往目标页面, 从而达到传参的目的 说明

  • 关于react中组件通信的几种方式详解

    前言 刚入门React可能会因为React的单向数据流的特性而遇到组件间沟通的麻烦,下面这篇文章就来给大家详细介绍下,在开始之前先来看一张图: react组件通信 需要组件之进行通信的几种情况 父组件向子组件通信 子组件向父组件通信 跨级组件通信 没有嵌套关系组件之间的通信 1. 父组件向子组件通信 React数据流动是单向的,父组件向子组件通信也是最常见的;父组件通过props向子组件传递需要的信息 Child.jsx import React from 'react'; import Pro

  • 微信小程序实现跳转的几种方式总结(推荐)

    今天把实现微信页面的跳转的几种方法总结分享下 1.使用导航组件,标签,页面链接来实现(可以发现点击时有背景) <!-- sample.wxml --> <view class="btn-area"> <navigator url="../my/my">跳转到新页面</navigator> </view> 参数如下 2.给页面布局加监听bindtap事件,然后在方法里面,通过wx.navigatorTo来实现

随机推荐