广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >React组件通信之路由传参(react-router-dom)
  • 926
分享到

React组件通信之路由传参(react-router-dom)

2024-04-02 19:04:59 926人浏览 独家记忆
摘要

目录  最近在学习React,现在的工作中使用的是Vue,在学习的过程中对两者进行比较,加深理解。   以下是react中的一小部分知识点,我个人觉得也是比较常用

  最近在学习React,现在的工作中使用的是Vue,在学习的过程中对两者进行比较,加深理解。

  以下是react中的一小部分知识点,我个人觉得也是比较常用的知识点,react组件通信的其中一种方式--路由传参(react组件通信的方式有多种,如props、事件回调、context、router、redux、缓存等等)。现在单页面SPA应用的比较广泛,在不刷新整个页面进行部分页面的跳转,使用路由跳转便在所难免,那么react路由除了进行页面之间的跳转,还有很大一个作用就是进行页面或者组件切换时传递参数,从而达到通信的目的。

  咱们用简单的实例对react路由跳转传参的方式进行说明(本文重点为路由传参方式,路由配置以及相关属性暂不展开)

  准备工作,安装路由依赖:


npm install -S react-router-dom

  之后在页面中引入路由:


import Home from './component/ManageSystem';
import { BrowserRouter as Router } from 'react-router-dom'
function App() {
  return (
    <Router>               //路由包裹,首页面里面的一个或多个页面可能需要路由切换
      <div id="App">
        <Home />
      </div>
    </Router>
  );
}
 
export default App

ManageSystem.js里面的某一部分需要路由切换显示内容,Route为需要切换的组件,path为路由路径,exact为精确匹配,Link为链接,to表示跳转的路由路径,与Route中的path对应,Redirect为重定向。


import React from 'react';
import Loadable from '../utils/loadable'
import {Route,Link,withRouter,Redirect,Switch} from "react-router-dom";
import { Button } from 'element-react';
//动态加载组件,加快首屏渲染
const About = Loadable(() => import('./About.js'))
const Users = Loadable(() => import('./Users.js'))
class Home extends React.Component {
    render() {
	    return (
		<div style={{ position: 'relative' }}>
		    <nav style={{ position: 'absolute', top: '0', left: '60%' }}>
				<ul>
				    <li style={{ marginBottom: '10px' }}>
				        <Link to={{pathname:"/home/about",query:{ text: '666' }}}>About</Link>
				    </li>
			        <li>
			            <Link to={{pathname:"/home/users/999",state:{ text: '888' }}}>Users</Link>
					</li>
				</ul>
			</nav>
			<div style={{ position: 'absolute', top: '20px', right: '20px' }}>
			    <Switch>
				    <Route exact path="/home" component={() => { return null }}>
				    </Route>
				    <Route exact path="/home/about" component={About}>
				    </Route>
				    <Route exact path="/home/users/:id" component={Users}>
				    </Route>
				    <Redirect exact from="/" to='/home' />
			    </Switch>
			</div>
		</div>
		);
	}
}

export default withRouter(Home)

 重点来了!!!

 在切换路由时,传参方式主要有3种:path动态路径、query、state 

 首先,path动态路径法,设置path的时候在地址中拼接一个动态参数,下面的动态参数为:id


<Route exact path="/home/users/:id" component={Users}>
</Route>

在进行页面切换或跳转时,将所要传递的信息拼在地址后面,如:


<Link to={{pathname:"/home/users/999"}}>Users</Link>

当切换到Users时,可以通过match来获取其传过来的信息,Users.js如下


import React from "react";
class Users extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      id: this.props.match.params.id  //此处获取通过path动态参数拼接传过来的信息
    }
  }
  componentDidMount(){
    console.log(this.props,'users props')
  }
  render() {
    return (
      <div>
        <span>我是users:{this.state.id}</span>
      </div>
    )
  }
}
export default Users

获取:this.props.match.params.id

可以打印props,查看里面的内容,不难发现,props中存在该信息

 那么对应的编程式跳转为:


<button onClick={() => { this.props.history.push({ pathname: '/home/users/999' }) }}>about</button>
 
//同样,用this.props.match.params.id进行取值

第二种传参方法为query,通过参数query将信息传递过去


<Link to={{pathname:"/home/users",query:{ text: '666' }}}>Users</Link>

获取:this.props.location.query.text

同样,打印出来看看

 对应的编程式跳转为:


<button onClick={() => { this.props.history.push({ pathname: '/home/users/999', query: { text: '666' } }) }}>Users</button>
 
//同样,获取方式this.props.location.query.text

第三种传参方法为state,通过参数state将信息传递过去,用法与query一致


<Link to={{pathname:"/home/users",state:{ text: '666' }}}>Users</Link>

获取:this.props.location.state.text

同样,打印出来看看

 对应的编程式跳转为:


<button onClick={() => { this.props.history.push({ pathname: '/home/users/999', state: { text: '666' } }) }}>Users</button>
 
//同样,获取方式this.props.location.state.text

ps:query跟state用一个重要的区别,那就是在页面跳转之后,重新刷新当前页面,query会消失,而state不会消失,即依然保存在location中。

不妨测试一下,对Users.js页面进行修改,如果query不存在,显示“query已消失”


import React from "react";
class Users extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      text: this.props.location.query ? this.props.location.query.text : 'query已消失'
    }
  }
  componentDidMount(){
    console.log(this.props,'users props')
  }
  render() {
    return (
      <div>
        <span>我是users:{this.state.text}</span>
      </div>
    )
  }
}
export default Users

通过跳转,获取数据正常,query存在

 重新刷新当前页面,则query消失

 页面显示为

 同样的过程使用state传参方式,location中state刷新当前页面也不会消失,推荐state方式。

总结:本文主要讲述react路由跳转传参的3种方式,在项目中涉及到某个页面跳转需要将某些信息传递给跳转目的页面,不妨考虑这几种方式。区别:动态地址方式虽然简单,但是传参的方式单一,只能拼在地址,且为字符串,当传递的信息过长时,地址看起来比较乱,信息也会暴露出来;而对于query来说,传参方式虽与state一致,但是有一点,跳转之后刷新当前页,query会消失,而state不会。

对比Vue中路由传参方式:

Vue组件间的通信方式(多种场景,通俗易懂,建议收藏)

到此这篇关于React组件通信之路由传参(react-router-dom)的文章就介绍到这了,更多相关React 路由传参内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: React组件通信之路由传参(react-router-dom)

本文链接: https://www.lsjlt.com/news/155807.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • React组件通信之路由传参(react-router-dom)
    目录  最近在学习react,现在的工作中使用的是vue,在学习的过程中对两者进行比较,加深理解。   以下是react中的一小部分知识点,我个人觉得也是比较常用...
    99+
    2022-11-12
  • react-router-dom之异步加载路由方式
    目录react-router-dom异步加载路由安装依赖react-loadablereact路由组件异步加载,优化白屏总结react-router-dom异步加载路由 这篇文章跟h...
    99+
    2023-03-24
    react-router-dom 异步加载路由 路由react-router-dom
  • React路由组件传参的三种方式(params、search、state)
    目录向路由组件传递params参数向路由组件传递search参数向路由组件传递state参数总结三种向路由组件传参的方式向路由组件传递params参数 当点击消息1这个导航链接时,展...
    99+
    2022-11-13
  • react之组件通信详解
    目录父组件与子组件通信子组件与父组件通信跨组件通信祖先子孙兄弟节点通信总结父组件与子组件通信 父组件将自己的状态传递给子组件,子组件当做属性来接收,当父组件更改自己状态的时...
    99+
    2022-11-12
  • React中路由的参数传递路由的配置文件详解
    目录路由的参数传递配置动态路由路由的配置文件路由的参数传递 传递参数有二种方式(需要注意的是, 这两种方式在Router6.x中都是提供的hook函数的API, 类组件需要通过高阶组...
    99+
    2022-11-13
    React路由参数传递 React路由配置文件 React路由 React路由参数
  • React组件间传值及跨组件通信详解
    目录组件间传值propsref状态提升跨组件通信组件间传值 props 父传子:通过自定义属性向子组件传值,值可以是任何类型 子传父:通过父组件把方法传给子组件,子组件调用传过去的方...
    99+
    2022-11-13
  • 如何实现React组件之间的通信
    这篇文章主要为大家展示了“如何实现React组件之间的通信”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何实现React组件之间的通信”这篇文章吧。1.定义两...
    99+
    2022-10-19
  • React Router V5怎么使用HOC组件实现路由拦截功能
    本篇内容主要讲解“React Router V5怎么使用HOC组件实现路由拦截功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React Router ...
    99+
    2023-07-05
  • React父子组件传值(组件通信)的实现方法
    目录1、父组件传值子组件2、子组件传值父组件3、兄弟组件传值1、父组件传值子组件 在引用子组件的时候传递,相当于一个属性,例如:在子组件内通过porps.param获取到这个para...
    99+
    2022-11-13
  • 详解React中组件之间通信的方式
    一、是什么 我们将组件间通信可以拆分为两个词: 组件 通信 回顾Vue系列的文章,组件是vue中最强大的功能之一,同样组件化是React的核心思想 相比vue,...
    99+
    2022-11-12
  • Vue路由组件如何通过props配置传参
    本篇内容介绍了“Vue路由组件如何通过props配置传参”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!具体如下:一、基于params参数传递...
    99+
    2023-07-02
  • React中组件之间通信的方式是什么
    本篇内容介绍了“React中组件之间通信的方式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、是什么我们将组件间通信可以拆分为两个词...
    99+
    2023-06-20
  • Vue路由组件通过props配置传参的实现
    目录一、基于params参数传递1、index.js(路由配置)2、Box_1.vue(父路由组件 - 发送参数) 3、Menu_1.vue(子路由组件 - 接收参数)二、...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作