react学习——23react中的路由的使用(重要)

一、路由的基本使用

		1.明确好界面中的导航区、展示区2.导航区的a标签改为Link标签<Link to="/xxxxx">Demo</Link>3.展示区写Route标签进行路径的匹配<Route path='/xxxx' component={Demo}/>4.<App>的最外侧包裹了一个<BrowserRouter><HashRouter>
 <Link className="list-group-item" to="/about">About</Link><Link className="list-group-item" to="/home">Home</Link>
{/*  注册路由组件--->  */}
<Route path={'/about'} component={About}></Route>
<Route path={'/home'} component={Home}></Route>
 <BrowserRouter><App />
</BrowserRouter>

二、路由组件与一般组件

1.写法不同:一般组件:<Demo/>路由组件:<Route path="/demo" component={Demo}/>2.存放位置不同:一般组件:components路由组件:pages3.接收到的props不同:一般组件:写组件标签时传递了什么,就能收到什么路由组件:接收到三个固定的属性history:go: ƒ go(n)goBack: ƒ goBack()goForward: ƒ goForward()push: ƒ push(path, state)replace: ƒ replace(path, state)location:pathname: "/about"search: ""state: undefinedmatch:params: {}path: "/about"url: "/about"

三、NavLink与封装NavLink

1.NavLink可以实现路由链接的高亮,通过activeClassName指定样式名

封装

import React, {Component} from "react";
import {NavLink} from "react-router-dom";export default class MyNavLink extends Component {render(){const {title} = this.props;return(<NavLink activeClassName='atguigu' className="list-group-item" {...this.props}/>);}
}

使用

<MyNavLink to="/about" title="About" a={1} b={2} c={3}>About</MyNavLink><MyNavLink to="/home" title="Home">Home</MyNavLink>

四、Switch的使用

		1.通常情况下,path和component是一一对应的关系。2.Switch可以提高路由匹配效率(单一匹配)。
<Switch><Route path={'/about'} component={About}></Route><Route path={'/home'} component={Home}></Route><Route path={'/home'} component={Test}></Route>
</Switch>

五、解决多级路径刷新页面样式丢失的问题

1.public/index.html 中 引入样式时不写 ./ 写 / (常用)
2.public/index.html 中 引入样式时不写 ./ 写 %PUBLIC_URL% (常用)
3.使用HashRouter

六、路由的严格匹配与模糊匹配

1.默认使用的是模糊匹配(简单记:【输入的路径】必须包含要【匹配的路径】,且顺序要一致)
2.开启严格匹配:<Route exact={true} path="/about" component={About}/>
3.严格匹配不要随便开启,需要再开,有些时候开启会导致无法继续匹配二级路由

七、Redirect的使用

1.一般写在所有路由注册的最下方,当所有路由都无法匹配时,跳转到Redirect指定的路由
2.具体编码:<Switch><Route path="/about" component={About}/><Route path="/home" component={Home}/><Redirect to="/about"/></Switch>

八、嵌套路由

1.注册子路由时要写上父路由的path值
2.路由的匹配是按照注册路由的顺序进行的

父路由

<MyNavLink to="/about">About</MyNavLink>
<MyNavLink to="/home">Home</MyNavLink>
{/* 注册路由 */}
<Switch><Route  path="/about" component={About}/><Route  path="/home" component={Home}/><Redirect to="/home"/>
</Switch>

子路由

<li>{/*<MyNavLink to="/home/news">News</MyNavLink>*/}<MyNavLink to="/home/news">news</MyNavLink>
</li>
<li><MyNavLink to="/home/message">Message</MyNavLink>
</li>
</ul>
{/* 注册路由 */}
<Switch>
<Route path={'/home/news'} component={News}></Route><Route path={'/home/message'} component={Message}></Route><Redirect to={'/home/news'}></Redirect>
</Switch>

九、向路由组件传递参数

1.params参数路由链接(携带参数)<Link to='/demo/test/tom/18'}>详情</Link>注册路由(声明接收)<Route path="/demo/test/:name/:age" component={Test}/>接收参数:this.props.match.params
2.search参数路由链接(携带参数)<Link to='/demo/test?name=tom&age=18'}>详情</Link>注册路由(无需声明,正常注册即可)<Route path="/demo/test" component={Test}/>接收参数:this.props.location.search备注:获取到的search是urlencoded编码字符串,需要借助querystring解析
3.state参数路由链接(携带参数)<Link to={{pathname:'/demo/test',state:{name:'tom',age:18}}}>详情</Link>注册路由(无需声明,正常注册即可)<Route path="/demo/test" component={Test}/>接收参数:this.props.location.state备注:刷新也可以保留住参数
import React, { Component } from 'react'
import {Link,Route} from "react-router-dom";
import Detail from "./Detail";export default class Message extends Component {state = {messageArr:[{id:1,title:'001'},{id:2,title:'002'},{id:3,title:'003'}]}render() {const {messageArr} = this.statereturn (<div><ul>{messageArr.map(item=>{return <li key={item.id}>{/*向路由组件传递params参数*/}{/*<Link to={`/home/message/detail/${item.id}/${item.title}`}>{item.title}</Link>&nbsp;&nbsp;*/}{/*向路由组件传递search参数*/}{/*<Link to={`/home/message/detail/?id=${item.id}&title=${item.title}`}>{item.title}</Link>*/}{/*向路由组件传递state参数*/}<Link to={{pathname:'/home/message/detail',state:{id:item.id,title:item.title}}}>{item.title}</Link>&nbsp;&nbsp;</li>})}</ul><hr/>{/*声明接收params参数*/}{/*<Route path="/home/message/detail/:id/:title" component={Detail}/>*/}{/*search参数无需声明接收,正常接收路由即可*/}{/*<Route path={"/home/message/detail"} component={Detail}/>*/}{/*state参数无需声明接收,正常接收路由即可*/}<Route path={"/home/message/detail"} component={Detail}/></div>)}
}
import React, {Component} from "react";
// import qs from 'qs'
const DetailData=[{id:1,content:'content1'},{id:2,content:'content2'},{id:3,content:'content3'}
]
export default class Detail extends Component {render(){console.log(this.props);//接收params参数// const {id,title}=this.props.match.params;//接收search参数// const {search}=this.props.location// const {id,title}=qs.parse(search.slice(1))//接收state参数const {id,title}=this.props.location.state;const findResult=DetailData.find(item=>item.id===Number(id));return(<ul><li>ID:{id}</li><li>Title:{title}</li><li>Content:{findResult.content}</li></ul>);}
}

十、编程式路由导航

				借助this.prosp.history对象上的API对操作路由跳转、前进、后退-this.prosp.history.push()-this.prosp.history.replace()-this.prosp.history.goBack()-this.prosp.history.goForward()-this.prosp.history.go()
replaceShow = (id,title)=>{console.log(id,title)//replace跳转+携带params参数// this.props.history.replace(`/home/message/detail/${id}/${title}`)//replace跳转+携带search参数// this.props.history.replace(`/home/message/detail?id=${id}&title=${title}`)//replace跳转+携带state参数this.props.history.replace(`/home/message/detail?`,{id,title})}pushShow(id, title) {//push跳转+携带params参数// this.props.history.push(`/home/message/detail/${id}/${title}`)//push跳转+携带search参数//this.props.history.push(`/home/message/detail?id=${id}&title=${title}`)//push跳转+携带state参数this.props.history.push(`/home/message/detail?`,{id,title})}goback=()=> {this.props.history.goBack()}goforward=() =>{this.props.history.goForward()}goTest = () => {this.props.history.go(2)}

十一、BrowserRouter与HashRouter的区别

	1.底层原理不一样:BrowserRouter使用的是H5的history API,不兼容IE9及以下版本。HashRouter使用的是URL的哈希值。2.path表现形式不一样BrowserRouter的路径中没有#,例如:localhost:3000/demo/testHashRouter的路径包含#,例如:localhost:3000/#/demo/test3.刷新后对路由state参数的影响(1).BrowserRouter没有任何影响,因为state保存在history对象中。(2).HashRouter刷新后会导致路由state参数的丢失!!!4.备注:HashRouter可以用于解决一些路径错误相关的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/44074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

*算法训练(leetcode)第二十七天 | 56. 合并区间、738. 单调递增的数字、968. 监控二叉树

刷题记录 56. 合并区间*738. 单调递增的数字*968. 监控二叉树 56. 合并区间 leetcode题目地址 排序后遇到有重合的区间选择最大的区间保存即可&#xff0c;结果集中保存的是离当前区间最近的区间&#xff0c;因此使用当前区间与结果集中的最后一个集合比较查看是否有重合&…

图论---匈牙利算法求二分图最大匹配的实现

开始编程前分析设计思路和程序的整体的框架&#xff0c;以及作为数学问题的性质&#xff1a; 程序流程图&#xff1a; 数学原理&#xff1a; 求解二分图最大匹配问题的算法&#xff0c;寻找一个边的子集&#xff0c;使得每个左部点都与右部点相连&#xff0c;并且没有两条边共享…

ABAP中创建销售订单的BAPI函数的使用方法

在ABAP中&#xff0c;用于创建销售订单的BAPI是BAPI_SALESORDER_CREATEFROMDAT2。这个BAPI允许你根据提供的数据创建一个新的销售订单。 要使用BAPI_SALESORDER_CREATEFROMDAT2 BAPI创建销售订单&#xff0c;你需要按照以下步骤操作&#xff1a; 准备输入数据&#xff1a; 订单…

【STM32学习】cubemx配置,串口的使用,串口发送接收函数使用,以及串口重定义、使用printf发送

1、串口的基本配置 选择USART1&#xff0c;选择异步通信&#xff0c;设置波特率 选择后&#xff0c;会在右边点亮串口 串口引脚是用来与其他设备通信的&#xff0c;如在程序中打印发送信息&#xff0c;电脑上打开串口助手&#xff0c;就会收到信息。 串口的发送接收&#xff0…

Java - JDK17语法新增特性(如果想知道Java - JDK17语法新增常见的特性的知识点,那么只看这一篇就足够了!)

前言&#xff1a;Java在2021年发布了最新的长期支持版本&#xff1a;JDK 17。这个版本引入了许多新的语法特性&#xff0c;提升了开发效率和代码可读性。本文将简要介绍一些常见的新特性&#xff0c;帮助开发者快速掌握并应用于实际开发中。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨…

相机光学(三十)——N5-N7-N8中性灰

GTI可提供N5/N7/N8中性灰涂料&#xff0c;用于不同的看色环境&#xff0c;N5/N7/N8代表深中浅不同的灰色程度&#xff0c;在成像、工业、印刷行业中&#xff0c;分别对周围观察环境有一定的要求&#xff0c;也出台了相应的标准文件&#xff0c;客户可以根据实际使用环境进行选择…

QT开发积累——qt中的注释和多行注释的几种方式,函数方法注释生成

目录 引出qt中的注释和多行注释方法的注释生成 总结日积月累&#xff0c;开发集锦方法参数加const和不加const的区别方法加static和不加static的区别Qt遍历list提高效率显示函数的调用使用&与不使用&qt方法的参数中使用&与不使用&除法的一个坑 项目创建相关新建…

交通气象站:保障道路安全的智慧之眼

随着社会的快速发展&#xff0c;交通运输日益繁忙&#xff0c;道路安全成为公众关注的焦点。在这个背景下&#xff0c;交通气象站作为保障道路安全的重要设施&#xff0c;正发挥着越来越重要的作用。它们不仅为交通管理部门提供及时、准确的气象信息&#xff0c;也为广大驾驶员…

高阶面试-dubbo的学习

SPI机制 SPI&#xff0c;service provider interface&#xff0c;服务发现机制&#xff0c;其实就是把接口实现类的全限定名配置在文件里面&#xff0c;然后通过加载器ServiceLoader去读取配置加载实现类&#xff0c;比如说数据库驱动&#xff0c;我们把mysql的jar包放到项目的…

Linux操作系统探索时间

Linux时间分为系统时间和硬件时间两种&#xff0c;系统时间指当前Linux中的时间&#xff0c;硬件时间指主板上有电池供电的时间。 -- 查看系统时间&#xff1a;date -- 查看硬件时间&#xff1a;hwclock --show -- 硬件时间同步到系统时间&#xff1a;hwclock --hctosys -- …

springmvc 如何对接接口

Spring MVC对接接口可以通过以下步骤进行&#xff1a; 设置相关的依赖&#xff1a;在项目的pom.xml文件中添加Spring MVC相关的依赖&#xff0c;如spring-webmvc、jackson-databind等。 创建Controller类&#xff1a;在项目中创建一个Controller类&#xff0c;使用Controller注…

arm环境安装达梦数据库

作者&#xff1a;振鹭 一、安装前准备 1、创建用户和用户组 groupadd dinstall useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba2、修改文件打开最大数 vi /etc/security/limits.conf #文件末尾添加以下四行 dmdba hard nofile 65536 dmdba soft nofile 65536 d…

企业SEO优化为什么选择下拉框优化?

搜索下拉框&#xff0c;也叫推荐词、联想词&#xff0c;有的位置叫大家都在搜&#xff0c;大家还在搜&#xff0c;相关搜索等等&#xff0c;其实都是搜索引擎给用户的推荐词&#xff0c;这个是伴随着搜索引擎普及应用而产生的一种SEO优化手段&#xff0c;它可以应用各种搜索平台…

Kafka安装使用指南

Kafka是一种高吞吐量的分布式发布订阅消息系统。 Kafka启动方式有Zookeeper和Kraft&#xff0c;两种方式只能选择其中一种启动&#xff0c;不能同时使用。 【Kafka安装】 Kafka下载 https://downloads.apache.org/kafka/3.7.1/kafka_2.13-3.7.1.tgz Kafka解压 tar -xzf kafka_…

神经网络设计过程

1.可根据Iris特征直接判断 2.神经网络方法&#xff0c;采集大量的Iris特征&#xff0c;分类对应标签&#xff0c;构成数据集。 将数据集喂入搭好的神经网络结构&#xff0c;网络通过反向传播优化参数得到模型。 有新的网络送入到模型里&#xff0c;模型会给出识别结果。 3.…

SaaS知识库新选择: 值得学习的七大SaaS知识库实例

|概述 在当前的SaaS&#xff08;Software as a Service&#xff09;行业中&#xff0c;公司面临着前所未有的机遇与挑战并存的现状。随着云计算和人工智能技术的飞速发展&#xff0c;SaaS模式已成为企业信息化转型的优选路径&#xff0c;为企业提供了高效、灵活且成本效益显著…

【linux】服务器配置raid1教程(硬件配置RAID1)

【linux】服务器配置raid1教程(硬件配置RAID1) 【创作不易,求点赞+关注+收藏】 【linux】服务器创建RAID1(软件配置RAID1) 文章目录 【linux】服务器配置raid1教程(硬件配置RAID1)一、前沿二、硬件配置RAID介绍三、通过BIOS界面设置RAID模式并创建RAID1三、查看RAID1数…

python(3.7版本)安装mitmproxy

环境介绍:win11, python3.7 pip install mitmproxy5.0.0 命令行cmd下,输入 Mitmdump 查看结果是否报错 如果报错上面这样子,就是markupsafe版本问题 换个Markupsafe版本就可以了 成功了吧!!!,如有问题,欢迎留言

nodejs学习之glob

用途 以shell使用的模式匹配文件。 安装 pnpm add glob使用 常用 import {glob} from "glob";//常用匹配 let pattern"./src/util/*.js"; //匹配src/util目录下所有js文件 let jsFiles await glob(pattern); jsFiles.forEach((item)>{console.lo…

【深度学习基础】MAC pycharm 专业版安装与激活

文章目录 一、pycharm专业版安装二、激活 一、pycharm专业版安装 PyCharm是一款专为Python开发者设计的集成开发环境&#xff08;IDE&#xff09;&#xff0c;旨在帮助用户在使用Python语言开发时提高效率。以下是对PyCharm软件的详细介绍&#xff0c;包括其作用和主要功能&…