Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >React router 4.0之参数传递

React router 4.0之参数传递

作者头像
OECOM
发布于 2020-07-01 09:37:13
发布于 2020-07-01 09:37:13
1.8K00
代码可运行
举报
文章被收录于专栏:OECOMOECOM
运行总次数:0
代码可运行

在前一篇文章中说到了react router 4的路由如何配置,这篇文章说一下路由跳转的参数问题。路由跳转传参一种方式是在link标签上写参数,另一种方式是通过方法传递参数,下面依次说一下。

先来说一下在Link标签内通过?来进行传递参数。

先看一下about.js文件内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React,{Component} from 'react'
import Child1 from './child1'
import Child2 from './child2'
import {Link,Route,Redirect} from 'react-router-dom'
class About extends Component{
	constructor(props){
		super(props);
		this.state = {
			myName : "这里是about页面"
		}
	}
	componentWillMount(){

	}
	showName(){
		console.log(this);
	}
	render(){
		let Child1Com = null;
		if(this.props.location.pathname=='/about'){
			Child1Com = <Redirect to="/about/child1">child1</Redirect>;
		}else{
				Child1Com = <Link to="/about/child1">child1</Link>;
		}
		return (
			<div>
				{this.state.myName}
				<div>
					<button onClick={this.showName.bind(this)}>按钮</button>
					<Link to="/inbox">inbox</Link>
						<div>
						{Child1Com}
						<Link to="/about/child2?id=4">child2</Link>
						 <Route path="/about/child1" component={Child1}/>
						 <Route path="/about/child2" component={Child2}/>
						</div>
				</div>
			</div>
		)
	}
}
export default About

在Link的连接里通过?写明参数,在跳转过去的页面通过js来获取url参数。这种方式对于参数的传递比较灵活,在url处查看也比较清晰明了。当然还有另一种写法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
return (
			<div>
				{this.state.myName}
				<div>
					<button onClick={this.showName.bind(this)}>按钮</button>
					<Link to="/inbox">inbox</Link>
						<div>
						{Child1Com}
						<Link to="/about/child2/4/10">child2</Link>
						 <Route path="/about/child1" component={Child1}/>
						 <Route path="/about/child2/:id/:count" component={Child2}/>
						</div>
				</div>
			</div>
		)

这种方式也可以进行参数的传递,缺点在于url路径显示效果和传递参数的灵活性,每增加一个参数,就需要在下面的Route中注册一个,并且顺序要一致。当然,接收方式也是不同的,先说第一种方式的接收方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const getParameter = (param)=>{
   		var query = window.location.search;
   		var iLen = param.length;
   		var iStart = query.indexOf(param);
   		if (iStart == -1)
   			return "";
   		iStart += iLen + 1;
   		var iEnd = query.indexOf("&", iStart);

   		if (iEnd == -1)
   			return query.substring(iStart);
   		return query.substring(iStart, iEnd);
 }

我的方式是将此段代码放到了一个js文件中,然后引入到相应的组件里,就可以获取到url参数,这种方式和普通的url获取参数方式相同,调用方法就是:getParameter('id')。

再说第二种获取参数的方式为:this.props.match.params.id,即可获取到参数。

很多情况下并不是直接通过点击来进行页面的跳转,这时可能会涉及到一些逻辑判断以后才进行跳转,下面来看实现方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React,{Component} from 'react'
import {Link} from 'react-router-dom'
import {getParameter} from '../static/js/common.js'
class Child2 extends Component{
  constructor(){
    super();
    this.state = {
      myName : "这里是child2页面"
    }
  }
  componentWillMount(){

  }
  goIndox(){
    this.props.history.push({
      pathname:"/inbox",
      query:{
        name:"inbox",
        myas:"哈哈"
      }
    })
  }
  render(){
    return (
      <div>
        {this.state.myName}
        <div>
          <h1>child2页面</h1>
          <div>
            <button onClick={this.goIndox.bind(this)}>inbox</button>
          </div>
        </div>
      </div>
    )
  }
}
export default Child2

query就是要传递的参数,此处的query是一个名字,可以自定义,接收的时候需要通过该名称来进行接收。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React,{Component} from 'react'
import {Link} from 'react-router-dom'
class Inbox extends Component{
	constructor(){
		super();
		this.state = {
			myName : "这里是Inbox页面"
		}
	}
	componentWillMount(){

	}
	showName(){
		console.log(this.state);
		  console.log(this.props.location.query.name);
	}
	render(){
		return (<div>fd
				<ul>
			        <li><Link to="/" >首页</Link></li>
							<button onClick={this.showName.bind(this)}>查看</button>
			      </ul>

			</div>
		)
	}
}
export default Inbox

如此,react router 4的路由传参就说完了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-02-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
React-router 4.0之路由配置
react-router 4.0已经发布了很长一段时间了,和3.x的API相比改动了很多地方。它遵循React的设计理念,即万物皆组件。所以 RR4 只是一堆提供了导航功能的组件(还有若干对象和方法),具有声明式(声明式编程简单来讲就是你只需要关心做什么,而无需关心如何去做,好比你写 React 组件,只需要 render 出你想要的组件,至于组件是如何实现的是 React 要处理的事情。),可组合性的特点。
OECOM
2020/07/01
1K0
React-Router-URL参数
React Router 是 React 应用中常用的路由管理库,而 URL 参数则是它的一个关键概念。URL 参数允许您在路由之间传递数据,从而使您的应用程序更灵活和交互性更强。
杨不易呀
2023/10/01
4090
在React中使用 react-router-dom 编程式路由导航【含V5.x、V6.x】
react-router-dom 编程式路由导航 (v5) 1.push跳转+携带params参数 props.history.push(`/b/child1/${id}/${title}`); 2
你的明明呐丶
2022/12/27
1.3K0
react-router@4.0 使用方法和源码分析
总结:switch根据location.pathname,path,exact,strict,sensitive获取元素并返回element
全栈程序员站长
2022/06/30
4640
react组件间的通信
在使用react过程中,不可避免的需要组件间的数据通信,数据通信一般情况有一下几种情况:
OECOM
2020/07/02
7740
滴滴前端二面常考react面试题(持续更新中)_2023-03-01
refs允许你直接访问DOM元素或组件实例。为了使用它们,可以向组件添加个ref属性。
用户10376779
2023/03/01
4.8K0
经常被问到的react-router实现原理详解
而且还经常会被xxx面试官问到,什么是前端路由,它的原理的是什么,它是怎么实现,跳转不刷新页面的...
夏天的味道123
2022/10/17
6060
React.js 实战之深入理解组件sublime 插件安装组件间通信
sublime 插件安装 用Package Control安装 按下Ctrl+Shift+P调出命令面板 输入install 调出 Install Package 选项并回车,然后在列表中选中要安
JavaEdge
2018/06/06
1.2K0
react-react-dom v6 知识整合
1. BrowserRouter / HashRouter 相当于容器(类似router-view),用于指定路由的模式
用户9914333
2022/12/14
6.7K0
react-react-dom v6 知识整合
04-React路由5版本(高亮, 嵌套, 参数传递... )
和Link功能一样, 但是会在点击的时候自动追加和移除一个class,那就是active, 可以通过属性activeClassName修改
彼岸舞
2022/08/24
1.3K0
04-React路由5版本(高亮, 嵌套, 参数传递... )
react-router 入门笔记
React-router 笔记 官方文档 基本思路 react-router 通过react 组件的方式实现, 路由相关的数据,通过props传递给组件调用, 路由层级关系, 通过标签嵌套实现 基础标签 BrowserRouter : 路由容器 该组件只能包含单个元素 Route : 组件渲染出口 必须包含在 BrowserRouter 中 exact 精确匹配 Link : 跳转链接 必须包含在 BrowserRouter 中 基本使用 // react-router-demo import
copy_left
2019/08/21
1.7K0
React 路由详解(超详细详解)
使用 Link 是会有一些问题的, 他不会显示按钮的高亮显示, 所以我使用 NavLink 来替代它
全栈程序员站长
2022/08/10
6.2K0
React 路由详解(超详细详解)
react基础--1
2.发现组件是函数定义的,随后调用该函数,将返回的虚拟DOM转换为真实DOM,随后展示在页面中
切图仔
2022/09/08
9070
字节前端面试被问到的react问题
Refs 提供了一种方式,用于访问在 render 方法中创建的 React 元素或 DOM 节点。Refs 应该谨慎使用,如下场景使用 Refs 比较适合:
beifeng1996
2022/11/01
2.4K0
一天梳理完React所有面试考察知识点
在shouldComponentUpdate()判断中,有一个有意思的问题,解释为什么 React setState() 要用不可变值
beifeng1996
2022/10/06
3K0
京东前端二面高频react面试题
每个React组件强制要求必须有一个 render()。它返回一个 React 元素,是原生 DOM 组件的表示。如果需要渲染多个 HTML 元素,则必须将它们组合在一个封闭标记内,例如 <form>、<group>、<div> 等。此函数必须保持纯净,即必须每次调用时都返回相同的结果。
hellocoder2028
2022/09/14
1.7K0
react学习系列2 使用react-router v4
问:react-router,react-router-native 和 react-router-dom 的区别 答:react-router是核心。react-router-native 和 react-router-dom是在 react-router 的基础上针对不同运行环境做为额外补充。对于web环境使用 react-router-dom。对于开发 react-native,使用 react-router-native 即可。 官方的例子及代码 web native 例子:手动跳转 路由文件
mafeifan
2018/09/10
5890
react-router-dom 实现路由跳转
稍微改变一下 create-react-app 创建后的src目录, 这里目录和vue相似
yangdongnan
2019/06/11
6.3K0
前端常见react面试题合集_2023-03-15
简言之,HOC是一种组件的设计模式,HOC接受一个组件和额外的参数(如果需要),返回一个新的组件。HOC 是纯函数,没有副作用。
用户10376779
2023/03/15
2.7K0
「React进阶」react-router v6 通关指南
不知不觉 react-router 已经到了 v6 版本了,可能很多同学发现,v6相比之前的 v5 有着翻天覆地的变化,因为最近接触到了 React 的新项目,用到了 v6 版本的 react-router,亲身体验发现这还是我认识的 router 吗 ?从 api 到原理都有较大的改动,所以今天就和大家一起看一下新版路由的变化。
用户6835371
2022/03/31
5.8K0
「React进阶」react-router v6 通关指南
相关推荐
React-router 4.0之路由配置
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验