当前位置: 首页 > news >正文

react路由 - react-router-dom

react路由

  • 现代的前端应用大多都是 SPA(单页应用程序),也就是只有一个 HTML 页面的应用程序。因为它的用户体验更好、对服务器的压力更小,所以更受欢迎。为了有效的使用单个页面来管理原来多页面的功能,前端路由应运而生
  • 前端路由是一套映射规则,在React中,是 URL路径 与 组件 的对应关系

react-router-dom

  • React实现页面路由的模块:react-router-dom

路由器组件:< HashRouter > < BrowserRouter >

  • HashRouter
    • hash模式
    • 全局路由切换
  • BrowserRouter
    • history模式
    • 单页面的路由切换
  • hash 路由和 history 路由的区别:
    • 原理不同: hash 路由是通过监听 hashChange 事件实现;history路由是通过 调用 history.pushState 方法 和监听 popState 事件实现
    • 表现方式不同:hash 路由前面带 # ;history路由没有
    • history路由在页面刷新的时候可能会有白屏的情况;因为刷新后浏览器会向服务器发送这个地址的请求,但文件资源并不存在,会报404错误;需要后端做一个保底映射,所有的请求全部拦截到index.html上。
  • 使用方式:
//例如:
import {// HashRouter as Router, // hash模式BrowserRouter as Router, // history模式Route,Switch,} from 'react-router-dom'import Home from '../containers/home'const BasicRouter = () => (<Router><Switch><Route exact path="/" component={Home} /></Switch></Router>)export default BasicRouter

Route 标签:定义具体组件

  • 语法:
//v5版本:
<Route path="/xx/xx" component={组件}></Route>  
//v6:
<Route path="/xx/xx" element={<组件名/>}/>
  • v5以及其他老版本:
    • 当路由为 / 时,默认模糊匹配;这样可能会存在匹配到多个的问题
    • 用 Switch 标签包裹之后:按顺序 自上而下 匹配
    • exact 属性可以设置为精准匹配
  • v6版本:
    • 默认 精准匹配;匹配完整路径;
    • 不需要Switch 标签、exact 属性
    • 若要匹配某一部分,则在路径后面加 /*
    • 可以将path 设置为 *,用于实现 404页面

Link 标签、NavLink标签

  • 类似 a 标签,用于跳转
  • NavLink:可以设置激活状态的样式
    • 老版本:可以通过 activeClassName 或 activeStyle 设置
    • v6:可以通关箭头函数 接收isActive

Navigate 组件

  • 用于重定向
  • 老版本:Redirect 标签重定向
   import { Navigate } from "react-router-dom";function A() {return <Navigate to="/b" />;}```
## useNavigate 编程式路由跳转
+ 可以通过 JS 代码完成路由跳转
+ useNavigate取代了原先版本中的useHistory
+  可以直接传入要跳转的目标路由
```jsimport { useNavigate } from 'react-router-dom';function Foo(){const navigate = useNavigate();return (// 上一个路径:/a;    当前路径: /a/a1<div onClick={() => navigate('/b')}>跳转到/b</div><div onClick={() => navigate('a11')}>跳转到/a/a1/a11</div><div onClick={() => navigate('../a2')}>跳转到/a/a2</div><div onClick={() => navigate(-1)}>跳转到/a</div>)}

动态路由参数

useParams 获取路径参数

  • 在Route组件中的path属性中定义路径参数
  • 在组件内通过useParams hook 访问路径参数
	<BrowserRouter><Routes><Route path="/foo/:id" element={<Foo />} /></Routes></BrowserRouter>;import { useParams } from "react-router-dom";export default function Foo() {const params = useParams();return (<div><h1>{params.id}</h1></div>);}

useSearchParams 访问和修改查询参数

  • 使用 useSearchParams hook 来访问和修改查询参数。其用法和 useState 类似,会返回当前对象和更改它的方法
  • 使用 setSearchParams 时,必须传入所有的查询参数,否则会覆盖已有参数
	import { useSearchParams } from "react-router-dom";// 当前路径为 /foo?id=12function Foo() {const [searchParams, setSearchParams] = useSearchParams();console.log(searchParams.get("id")); // 12setSearchParams({name: "foo",}); // /foo?name=fooreturn <div>foo</div>;}

路径匹配规则

  • 当URL同时匹配到含有路径参数的路径和无参数路径时,优先匹配没有参数的”具体的“(specific)路径。
<Route path="teams/:teamId" element={<Team />} />
<Route path="teams/new" element={<NewTeamForm />} />
//如上的两个路径,将会匹配 teams/new

History 对象

相关文章:

react路由 - react-router-dom

react路由 现代的前端应用大多都是 SPA&#xff08;单页应用程序&#xff09;&#xff0c;也就是只有一个 HTML 页面的应用程序。因为它的用户体验更好、对服务器的压力更小&#xff0c;所以更受欢迎。为了有效的使用单个页面来管理原来多页面的功能&#xff0c;前端路由应运而…...

01-RTOS

对于裸机而言&#xff0c;对于RTOS而言即&#xff1a;对于裸机&#xff0c;打游戏意味着不能回消息 回消息意味着不能打游戏对于RTOS 打游戏和裸机的切换只需要一个时间片节拍 1ms 从宏观来看 就是同时进行的两件事&#xff08;但要在这两件事情的优先级一样的情况下&#xff0…...

信息安全管理

信息安全管理信息安全管理信息安全风险管理信息安全管理体系应急响应与灾难恢复应急响应概况信息系统灾难修复灾难恢复相关技术信息安全管理 管理概念&#xff1a;组织、协调、控制的活动&#xff0c;核心过程的管理控制 管理对象和组成&#xff1a;包括人员在内相关资产&…...

深度学习tips

1、datasets_make函数中最后全部转化为numpy形式 datanp.array(data)否则会出现问题&#xff0c;比如数据是103216&#xff0c;经过trainloader生成tensor后&#xff08;batch_size为30&#xff09;&#xff0c;发现生成的数据为&#xff1a; data.shape #(10,) data[0].shape…...

2023-2-13 刷题情况

替换子串得到平衡字符串 题目描述 有一个只含有 ‘Q’, ‘W’, ‘E’, ‘R’ 四种字符&#xff0c;且长度为 n 的字符串。 假如在该字符串中&#xff0c;这四个字符都恰好出现 n/4 次&#xff0c;那么它就是一个「平衡字符串」。 给你一个这样的字符串 s&#xff0c;请通过…...

[HSCSEC 2023] rev,pwn,crypto,Ancient-MISC部分

比赛后有讲解&#xff0c;没赶上&#xff0c;前20比赛完1小时提交WP&#xff0c;谁会大半夜的起来写WP。总的感觉pwn,crypto过于简单&#xff0c;rev有2个难的不会&#xff0c;其它不是我的方向都感觉过于难&#xff0c;一个都没作。revDECOMPILEONEOONE入门题&#xff0c;一个…...

SpringBoot 接入 Spark

本文主要介绍 SpringBoot 与 Spark 如何对接&#xff0c;具体使用可以参考文章 SpringBoot 使用 Spark pom 文件添加 maven 依赖 spark-core&#xff1a;spark 的核心库&#xff0c;如&#xff1a;SparkConfspark-sql&#xff1a;spark 的 sql 库&#xff0c;如&#xff1a;s…...

在线支付系列【23】支付宝开放平台产品介绍

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 文章目录前言支付产品App 支付手机网站支付电脑网站支付新当面资金授权当面付营销产品营销活动送红包会员产品App 支付宝登录人脸认证信用产品芝麻 GO芝麻先享芝麻免押芝麻工作证安全产品交易安全防护其…...

Python绝对路径和相对路径详解

在介绍绝对路径和相对路径之前&#xff0c;先要了解一下什么是当前工作目录。什么是当前工作目录每个运行在计算机上的程序&#xff0c;都有一个“当前工作目录”&#xff08;或 cwd&#xff09;。所有没有从根文件夹开始的文件名或路径&#xff0c;都假定在当前工作目录下。注…...

基于多进程的并发编程

一&#xff1a;不同平台基于多进程并发编程的实现 1.Windows平台 参考博文&#xff1a;Windows 编程&#xff08;多进程&#xff09; 更多API: 1&#xff09;waitForSingleObject&#xff1a;等待一个内核对象变为已通知状态 2&#xff09;GetExitCodeProcess&#xff1a;获取…...

Flask入门(4):CBV和FBV

目录4.CBV和FBV4.1 继承 views.View4.2 继承 views.MethodView4.CBV和FBV 前面的例子中&#xff0c;都是基于视图函数构建视图&#xff08;FBV&#xff09;&#xff0c;和Django一样&#xff0c;Flask也有基于类构建视图&#xff08;CBV&#xff09;的方法。这种方式用的不多&…...

Qt OpenGL(三十九)——Qt OpenGL 核心模式-在雷达坐标系中绘制飞行的飞机

提示:本系列文章的索引目录在下面文章的链接里(点击下面可以跳转查看): Qt OpenGL 核心模式版本文章目录 Qt OpenGL(三十九)——Qt OpenGL 核心模式-在雷达坐标系中绘制飞行的飞机 一、场景 在之前绘制完毕雷达显示图之后,这时候,我们能匹配的场景就更广泛了,比如说…...

系统应用 odex 转 dex

说下为什会有这个需求&#xff0c;以某系统应用为例&#xff0c;我们通过 adb 获取到的 apk 反编译查看只有少部分代码和资源&#xff0c;关键代码看不到。 经过一系列操作&#xff0c;把 odex 转换为 dex 可以看到源码。 工具下载 Smali 下载 1、使用 adb shell pm list pa…...

【GPLT 三阶题目集】L3-013 非常弹的球

刚上高一的森森为了学好物理&#xff0c;买了一个“非常弹”的球。虽然说是非常弹的球&#xff0c;其实也就是一般的弹力球而已。森森玩了一会儿弹力球后突然想到&#xff0c;假如他在地上用力弹球&#xff0c;球最远能弹到多远去呢&#xff1f;他不太会&#xff0c;你能帮他解…...

vue项目第三天

论坛项目动态路由菜单以及渲染用户登录全局前置拦截器获取用户的菜单以及接口执行过程解析菜单数据&#xff0c;渲染伟动态路由。菜单数据将数据源解析为类似路由配置对象的格式&#xff08;./xxx/xxx 这种格式&#xff09;。下方是路由实例的代码,后面封装了很多方法这里也需要…...

【渝偲医药】实验室关于核磁共振波谱NMR的知识(原理、用途、分析、问题)

核磁共振波谱法&#xff08;Nuclear Magnetic Resonance&#xff0c;简写为NMR&#xff09;与紫外吸收光谱、红外吸收光谱、质谱被人们称为“四谱"&#xff0c;是对各种有机和无机物的成分、结构进行定性分析的强有力的工具之一&#xff0c;亦可进行定量分析。 核磁共振&…...

教你文本生成图片——stablediffusion

今天来点轻松的话题&#xff0c;带大家玩一个用文字生成图片的模型。相信大家如果关注AIGC领域&#xff0c;对文本生成图片&#xff0c;对Stablefiffusion、DEALL.E应该不陌生。今天给大家介绍的就是基于SD2 finetune出来的一个模型&#xff08;&#xff09;这篇文章不会教大家…...

C语言学习笔记-命令行参数

在图形界面普及之前都使用命令行界面。DOS和UNIX就是例子。Linux终端提供类UNIX命令行环境。 命令行&#xff08;command line&#xff09;是在命令行环境中&#xff0c;用户为运行程序输入命令的行。命令行参数&#xff08;command-line argument&#xff09;是同一行的附加项…...

ASEMI代理FGH60N60,安森美FGH60N60车规级IGBT

编辑-Z 安森美FGH60N60车规级IGBT参数&#xff1a; 型号&#xff1a;FGH60N60 集电极到发射极电压&#xff08;VCES&#xff09;&#xff1a;600V 栅极到发射极电压&#xff08;VGES&#xff09;&#xff1a;20V 收集器电流&#xff08;IC&#xff09;&#xff1a;120A 二…...

http409报错原因

今天一个同事的接口突然报409,大概百度了一下,不是很清楚,谷歌也没找到特别好的解释 因为是直接调用的gitlab,就直接看了下gitlab的api The following table shows the possible return codes for API requests. Return valuesDescription200 OKThe GET, PUT or DELETE request…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...