React-Router 5.0 制作导航栏+页面参数传递

news2024/11/26 9:39:30

React使用路由

使用React构建SPA应用(单页面应用),要想实现页面间的跳转,首先想到的就是使用路由。在React中,常用的有两个包可以实现这个需求,那就是react-routerreact-router-dom。本文主要针对react-router-dom进行说明。

众所周知,JSDOM BOM ECMAScript 组成, React-Router-Dom 使用 BOM 提供的 history API

React-Router-Dom有两种路由方式 HashRouterBrowserRouter

  • HashRouter特点 在URL中采用#号来作为当前视图的地址,改变#号后的参数,页面并不会重载
  • BrowserRouter特点 和正常浏览网易url类似 页面并不会重载

React-Router-Dom 导航实现

管他三七二十一 先安装再说: yarn add react-router-dom

在使用React-Router-DomAPI之前 需要使用BrowserRouterHashRouter包裹住

// 将路由定义为根组件
import {BrowserRouter, HashRouter as Router} from 'react-router-dom';

ReactDOM.render(
    <Router>
        <App />
    </Router>
, document.getElementById('root'));

// 然后定义路由
 <Switch>
      <Route exact path="/组件1" component={组件1} />
      <Route path="/组件2" component={组件2} />
      <Route path="/组件3">
            <组件3 />
      </Route>
      <Route render={(props) => {
            return (
                <div>
                    Router Not Found~ 404
                </div>
            );
      }} />      
</Switch>

// 导航实现
<NavLink to="/组件1" activeStyle={activeStyle}>组件1</NavLink>
<NavLink to="/组件2" activeStyle={activeStyle}>组件2</NavLink>
<Link to="/组件3" activeStyle={activeStyle}>组件3</Link>

以上代码已经实现了一个基本的导航

示例:

导航实现

导航代码剖析

BrowserRouterHashRouter已经介绍过了 两种url不同的展现形式
定义路由时使用了三种不同的方式:

  • 指定component对应的组件
  • 将组件作为子组件
  • router指定render函数。返回一个组件

几种声明方式的区别:

  • 第一种直接指定是比较常见的 这样会将history对象直接注入到组件的props
  • 第二种是路由跳转过去只展示对应组件 props里面不存在history对象 如果想使用history对象的需要使用withRouter这个高阶函数 进行history注入
  • 第三种可以直接传入props 直接拥有history对象 比较方便

Switch组件:
类似于编程语言的条件控制语句,匹配到一个Route就不会往下匹配了

Route组件:
如果Route没用指定path 只要匹配不到path的都会渲染这个组件 可以用这个增加用户体验 实现一个友好404页面

exact属性 严格匹配路由 防止 /one 匹配到 /one/two这个路由 因为路由的匹配顺序是至上而下 定义两个路由如果 /one/two 在前面的话 不使用严格匹配则不会返回预期结果

  • NavLink 和Link
    这两个组件都是对 <a href="">A链接</a> 的一种封装 但是使用场景不太一样
    如果选择导航栏的时候使用NavLink非常合适 因为他直接提供activeStyle等属性 直接聚焦在这个组件上时style会应用给组件

Link一般作用于跳转到其他页面 实则就是A链接

React-Router-Dom 页面跳转参数传递

主要就是使用history对象进行页面跳转

API介绍:

  • history.goBack() 返回上一页
  • history.replace() 在有些场景下面 重复使用push 或者 a标签会产生死循环 为了避免这种情况发生 在可能出现死循环的地方使用replace方式来跳转
  • history.push() 进入新页面

页面参数传递

  • 第一种
    // 隐示传参
    传递
    props.history.push(`/test`, {
                name: 'sb'
            });
    获取
    props.location.state        
  • 第二种
    传递
    props.history.push({
                pathname: '/test',
                query: {
                    id: 1
                }
            });
    获取
    props.location.query       
  • 第三种
    传递
    props.history.push('/about/1');
    获取
    props.match.params 
    
    
    或者
    props.history.push('/about?id=1');
    获取
    props.location.search

示例:

输入数据传递参数给下一个页面

参数展示

代码

跳转参数传递

参数展示代码

常用API

  • HashRouter 浏览器会在路由砂锅出现#号字样 (一般会当成根组件使用)
  • BrowserRouter 浏览器路由正常显示 (一般会当成根组件使用)
  • Link 对a标签的一个封装
  • to属性对应的值可以是字符串 也可以是location对象 一般作用于做跳转
  • NavLink 一般作用于做导航 可以控制选中之后的样式
  • Redirect 重定向跳转
  • Route 路由分配 哪个path对应哪个路由
  • exact 严格匹配
  • component 指定渲染的组件
  • Prompt 确定是否离开当前页面提示 监听离开事件

HOOKs 对于函数组件的一些history操作

  • useRouteMatch()
  • useParams()

来源参考:憧憬在 aoppp.com发布

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

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

相关文章

麒麟V10服务器 安装samba 软件,并且实现远程连接(压缩包形式)

目录 1 安装包2 实现3 如何查看安装的sambd 的版本4 使用 1 安装包 百度网盘 链接: https://pan.baidu.com/s/1l6HDAGE4_Itj-cp7XtpUNg 提取码: 100w 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦2 实现 以下是在Linux系统中使用压缩包方式安装Samba服务的步…

angular框架-通过依赖注入方式挂载loading以实现任意地方一行代码调用全局loading

前言 本文主要阐述关于在angular项目中&#xff0c;loading的常见的使用方式&#xff0c;以及如何全局挂载loading&#xff0c;实现一行代码控制loading开&#xff0c;一行代码控制loading关闭。 正文 首先在angular中增加loading&#xff0c;主要就是组件级和全局挂载&…

Python+appium自动化测试-调用服务器接口

当前很多APP登录都需要绑定手机号&#xff0c;但当我们需要足够多的模拟新用户的注册登录时&#xff0c;无法提供大量的手机号来测试&#xff0c;所以可以让服务器给出一个清除账号的接口&#xff0c;在写自动化脚本的时候可以调用这个接口&#xff0c;保证能够使用一个账号进行…

pycharm的基本使用

废话文学 本人记录笔记始终遵循“能动手绝不动脑&#xff0c;能动脑绝不动手”的基本原则。不会的操作&#xff0c;跟着笔记干就完事了&#xff0c;还动啥脑袋&#xff1f;留着脑细胞刷抖音擦边小姐姐他不香吗&#xff1f; 什么是IDE IDE即【集成开发环境】&#xff0c;Inte…

【Algorithm】Java刷题中要熟练使用的容器Api、Stream流、Lambda表达式

Java刷题中要熟练使用的Stream流、Lambda表达式、容器Api 1.Stream流1.概述2.分类3.具体用法流的常用创建方法 2.Lambda表达式函数式接口Lambda书写语法方法引用 3.各类Api 1.Stream流 1.概述 Stream Api是「集合操作」的一种简化表达形式。其特点是惰性求值&#xff0c;流在…

maven repositories更新失败

在项目的pom文件中添加以下配置 <repositories><repository><id>alimaven</id><name>Maven Aliyun Mirror</name><url>http://maven.aliyun.com/nexus/content/repositories/central/</url><releases><enabled>tr…

视频批量剪辑软件开发源码+SaaS

工具能力 API 描述 上传素材接口 开发者可通过本接口将使用素材上传至抖音服务器。 上传临时素材接口 上传临时素材接口。 获取素材列表接口 获取素材列表接口。 删除素材接口 删除素材接口。 小程序接口能力 获取小程序接口能力。 模拟webhook事件 模拟webhook事…

基于Python的接口自动化-HTTP接口基本组成和网页构成

目录 引言 1、HTTP简介 2、HTTP原理和网页基础 2.1、 HTTP基本原理 2.2、 HTTP请求过程 2.3、 网页构成 【自动化测试工程师学习路线】 引言 在我们进行接口测试时&#xff0c;了解HTTP接口的基本组成和网页构成是非常重要的。 而Python作为一门功能强大、易学易用的编程…

亚马逊美国站 解压神器减压小玩具CPC认证

解压玩具又称减压玩具Relaxing toys&#xff0c;包括挤压、摔砸、揉捏、旋转等多种类型&#xff0c;主要供成年人使用&#xff0c;帮助释放压力。 当提到解压玩具时&#xff0c;通常指的是一类旨在缓解压力、放松心情的小型玩具。以下是几种常见的解压玩具及其简要介绍&#x…

一键开启GPT 平行时空模式

不知道大家日常使用GPT的时候&#xff0c;在一次会话中是如何完成同类任务的对话的? 简单点来说&#xff0c;假设你已经完成了角色设定&#xff0c;比如你设定GPT是一名文案编辑&#xff0c;那么接下来你会多次给它提交稿件让它进行编辑&#xff0c;那么在多次提交的时候&…

基于jsp+mysql+Spring+mybatis+VUE的SpringBoot电影院会员积分管理系统

运行环境: 最好是java jdk 1.8&#xff0c;我在这个平台上运行的。其他版本理论上也可以。 IDE环境&#xff1a; Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以&#xff0c;如果编译器的版本太低&#xff0c;需要升级下编译器&#xff0c;不要弄太低的版本 tomcat服务器环…

【剑指offer专项突破版】数组篇——“C“

文章目录 前言一 . 排序数组中两个数字的和题目分析思路分析法①代码——双指针法②代码——二分查找 二. 数组中和为 0 的三个数题目分析问题转换代码 三. 和大于等于 target 的最短子数组题目分析思路分析代码 四. 乘积小于 K 的子数组题目分析思路分析代码 五. 和为 k 的子数…

2023 年前端 Web 发展趋势

虽然就个人观点&#xff0c;我觉得 Web 开发在最近几年都没什么进展&#xff08;2016 年至 2021 年&#xff09;&#xff0c;但在刚刚过去的 2022 年中确实又出现了一些新的技术。在本文中&#xff0c;我想跟大家聊聊自己看到的最新 Web 开发的发展趋势。相信这波浪潮会继续激发…

PLC采集串口被占用、网口被占用,网络IP地址不能修改、多台设备IP不同网段等问题解决方案

在我们数据采集项目中&#xff0c;经常碰到端口被串口被触摸屏占用&#xff0c;网口被占用&#xff0c;修改IP增加风险&#xff0c;另外增加新的端口需要通过PLC的编程软件组态&#xff0c;涉及到上传下载PLC程序&#xff0c;耗时耗力很不方便。以下是我们总结的项目中解决办法…

JVM-对象布局

JVM中对象布局 通过引入JOL工具&#xff0c;查看对象在JVM中的布局。 <dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-core</artifactId><version>0.14</version></dependency>对象的在JVM中的基本信息 普通…

iconfont字体的引用

官网&#xff1a;giconfont-阿里巴巴矢量图标库iconfont-国内功能很强大且图标内容很丰富的矢量图标库&#xff0c;提供矢量图标下载、在线存储、格式转换等功能。阿里巴巴体验团队倾力打造&#xff0c;设计和前端开发的便捷工具https://www.iconfont.cn/1. 搜索图标&#xff0…

【正点原子STM32连载】 第三十章 ADC实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第三十…

2023最新项目管理软件排行榜!快来了解各大品牌优缺点

项目管理是一个复杂而又多样化的过程。在这个过程中&#xff0c;管理者需要处理大量的信息&#xff0c;规划资源&#xff0c;分配任务和监督进展。为了更好地管理项目&#xff0c;许多企业和组织开始采用项目管理软件。这些软件不仅可以帮助管理者更好地处理信息&#xff0c;还…

让你不再疑惑怎么转换音频格式

你是否有过这样的经历&#xff1f;听到了一首喜欢的歌曲&#xff0c;但是只能在特定的平台或设备上播放&#xff0c;因为它只存在于视频网站或某个应用程序中。或者你想要将一首歌曲作为铃声或者用于其他用途&#xff0c;但是音频文件的格式却不被平台所支持。这是&#xff0c;…

3D数字孪生技术在水利工程上面的应用价值

"农功今可济,水利更毋隳。”水利作为国民经济稳定和谐的重要部分&#xff0c;运用科技化手段对水利项目进行管理&#xff0c;能完美契合智慧水利灾害管理与防治所需。深圳华锐视点利用数字孪生和三维可视化技术搭建的智慧水利可视化管理平台&#xff0c;通过web3d开发建模…