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

react 路由跳转的几种方式

在 React 中,路由跳转通常通过 react-router-dom(或类似的路由库)来实现。以下是几种常见的路由跳转方式:

1. 使用 <Link> 组件

<Link> 是最简单的路由跳转方式,它会生成一个 <a> 标签,点击后可以导航到指定的路由,而不会重新加载页面。

import { Link } from "react-router-dom";function App() {return (<div><h1>Home Page</h1><Link to="/about">Go to About</Link></div>);
}

特点:

  • 适合用于页面级的导航。
  • 不会触发页面重新加载,而是通过 React Router 的内部机制更新页面内容。

2. 使用 <NavLink> 组件

<NavLink><Link> 的一个变体,它会在当前路由匹配时自动添加一个样式类(如 active),非常适合用于导航栏。

import { NavLink } from "react-router-dom";function App() {return (<nav><NavLink to="/" exact activeClassName="active">Home</NavLink><NavLink to="/about" activeClassName="active">About</NavLink></nav>);
}

特点:

  • <Link> 类似,但提供了额外的样式控制。
  • 适合用于导航栏或侧边栏。

3. 使用 useHistory 钩子(React Router v5)

在 React Router v5 中,useHistory 钩子可以用于编程式导航。它允许你在代码中控制路由跳转。

import { useHistory } from "react-router-dom";function LoginButton() {const history = useHistory();const handleClick = () => {history.push("/dashboard");};return <button onClick={handleClick}>Login</button>;
}

特点:

  • 适合在事件处理函数中进行路由跳转。
  • 可以传递查询参数或状态。

4. 使用 useNavigate 钩子(React Router v6)

在 React Router v6 中,useHistory 被替换为 useNavigate,功能类似但更简洁。

import { useNavigate } from "react-router-dom";function LoginButton() {const navigate = useNavigate();const handleClick = () => {navigate("/dashboard");};return <button onClick={handleClick}>Login</button>;
}

特点:

  • 替代了 v5 中的 useHistory
  • 更简洁的 API 设计。

5. 使用 <Redirect> 组件(React Router v5)

<Redirect> 是一种在组件中实现路由跳转的方式,通常用于条件渲染。它会在渲染时直接跳转到指定路由。

import { Redirect } from "react-router-dom";function PrivateRoute({ isLoggedIn }) {return isLoggedIn ? <Dashboard /> : <Redirect to="/login" />;
}

特点:

  • 适合用于权限控制或条件跳转。
  • 在 React Router v6 中,<Redirect> 被移除,推荐使用 navigate 或其他方式替代。

6. 使用 navigate 函数(React Router v6)

在 React Router v6 中,navigate 函数不仅可以用于编程式导航,还可以实现相对路径跳转。

import { useNavigate } from "react-router-dom";function GoBackButton() {const navigate = useNavigate();const handleClick = () => {navigate(-1); // 返回上一页};return <button onClick={handleClick}>Go Back</button>;
}

特点:

  • 支持相对路径跳转(如 navigate(-1) 返回上一页)。
  • 更灵活的路由控制。

7. 使用 history 对象(自定义路由库)

如果你使用的是自定义路由库(如 history),可以通过 history.pushhistory.replace 方法实现跳转。

import { useHistory } from "history";function LoginButton() {const history = useHistory();const handleClick = () => {history.push("/dashboard");};return <button onClick={handleClick}>Login</button>;
}

特点:

  • 适合在不使用 React Router 的情况下实现路由跳转。
  • 需要手动配置 history 对象。

总结

  • <Link><NavLink>:适合页面级导航,简单易用。
  • useNavigateuseHistory:适合编程式导航,适合在事件处理函数中使用。
  • navigate 函数:适合更灵活的路由控制,支持相对路径。
  • <Redirect>:适合条件跳转,但在 React Router v6 中已被移除。

根据你的具体需求选择合适的路由跳转方式即可。

相关文章:

react 路由跳转的几种方式

在 React 中&#xff0c;路由跳转通常通过 react-router-dom&#xff08;或类似的路由库&#xff09;来实现。以下是几种常见的路由跳转方式&#xff1a; 1. 使用 <Link> 组件 <Link> 是最简单的路由跳转方式&#xff0c;它会生成一个 <a> 标签&#xff0c…...

2.你有什么绝活儿?—Java能做什么?

1、Java的绝活儿&#xff1a;要问Java有什么绝活&#xff0c;我觉得它应该算是一位魔法师&#xff0c;会的绝活儿有很多&#xff0c;要说最能拿得出手的当属以下三个。 1.1 平台无关性&#xff1a;Java可以在任何地方施展魔法&#xff0c;无论是Windows、Linux还是Mac&#xf…...

2025年2月文章一览

2025年2月编程人总共更新了17篇文章&#xff1a; 1.2025年1月文章一览 2.《Operating System Concepts》阅读笔记&#xff1a;p2-p8 3.《Operating System Concepts》阅读笔记&#xff1a;p9-p12 4.《Operating System Concepts》阅读笔记&#xff1a;p13-p16 5.《Operati…...

C++ | 面向对象 | 类

&#x1f47b;类 &#x1f47e;语法格式 class className{Access specifiers: // 访问权限DataType variable; // 变量returnType functions() { } // 方法 };&#x1f47e;访问权限 class className {public:// 公有成员protected:// 受保护成员private:// 私有成员 }…...

leetcode:2164. 对奇偶下标分别排序(python3解法)

难度&#xff1a;简单 给你一个下标从 0 开始的整数数组 nums 。根据下述规则重排 nums 中的值&#xff1a; 按 非递增 顺序排列 nums 奇数下标 上的所有值。 举个例子&#xff0c;如果排序前 nums [4,1,2,3] &#xff0c;对奇数下标的值排序后变为 [4,3,2,1] 。奇数下标 1 和…...

Visionpro cogToolBlockEditV2.Refresh()

在 C# 中使用 cogToolBlockEditV2.Refresh() 方法主要用于刷新 CogToolBlockEditV2 控件的显示状态&#xff0c;适用于动态更新界面或重新加载工具块&#xff08;ToolBlock&#xff09;的场景。以下是具体说明和典型应用场景。 基本作用 刷新控件显示&#xff1a;当修改了与 C…...

Apache Spark中的依赖关系与任务调度机制解析

Apache Spark中的依赖关系与任务调度机制解析 在Spark的分布式计算框架中,RDD(弹性分布式数据集)的依赖关系是理解任务调度、性能优化及容错机制的关键。宽依赖(Wide Dependency)与窄依赖(Narrow Dependency)作为两种核心依赖类型,直接影响Stage划分、Shuffle操作及容…...

网络基础III

目录 一、网络层 1.1IP协议 1.2网段划分&#xff08;&#x1f53a;&#xff09; 1.3特殊的ip地址 1.4ip地址的数量限制 1.5私有ip和公网ip 1.6路由 二、数据链路层 2.1认识以太网 2.2以太网帧格式 2.3认识mac地址 2.4mac地址和ip地址 2.5认识MTU 2.6MTU对IP协议的…...

【SpringBoot】自动配置原理与自定义启动器

Spring Boot 自动配置原理与自定义启动器 目录标题 Spring Boot 自动配置原理与自定义启动器摘要1. 引言2. Spring Boot自动配置原理分析2.1 自动配置的核心流程2.2 核心注解与配置文件解析2.2.1 EnableAutoConfiguration2.2.2 spring.factories 文件 2.3 自动配置类剖析2.4 配…...

Element实现el-dialog弹框移动、全屏功能

1、在Vue项目中src/utils目录中创建dialog.js&#xff0c;用来定义draggable-dialog&#xff1b; import Vue from vue Vue.directive(draggable-dialog, { // 属性名称draggable-dialog&#xff0c;前面加v- 使用bind(el, binding, vnode) {const dialogHeaderEl el.querySe…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(11)

详解&#xff08;11&#xff09; 初始化配置解析上下文 senv environ;ngx_memzero(&conf, sizeof(ngx_conf_t));/* STUB: init array ? */conf.args ngx_array_create(pool, 10, sizeof(ngx_str_t));if (conf.args NULL) {ngx_destroy_pool(pool);return NULL;}conf.te…...

千峰React:案例一

做这个案例捏 因为需要用到样式&#xff0c;所以创建一个样式文件&#xff1a; //29_实战.module.css .active{text-decoration:line-through } 然后创建jsx文件&#xff0c;修改main文件&#xff1a;导入Todos&#xff0c;写入Todos组件 import { StrictMode } from react …...

部署Joplin私有云服务器postgres版-docker compose

我曾经使用过一段时间 Joplin&#xff0c;官方版本是收费的&#xff0c;而我更倾向于将数据掌握在自己手中。因此&#xff0c;在多次权衡后&#xff0c;我决定自己搭建 Joplin 服务器并进行尝试。 个人搭建的版本与数据库直连&#xff0c;下面是使用 Docker Compose 配置数据库…...

rust学习笔记6-数组练习704. 二分查找

上次说到rust所有权看看它和其他语言比有什么优势&#xff0c;就以python为例 # Python3 def test():a [1, 3, -4, 7, 9]print(a[4])b a # 所有权没有发生转移del b[4]print(a[4]) # 由于b做了删除&#xff0c;导致a再度访问报数组越界if __name__ __main__:test() 运行结…...

Jsmoke-一款强大的js检测工具,浏览器部署即用,使用方便且高效

目录标题 Jsmoke &#x1f6ac;&#x1f6ac; by Yn8rt使用方式界面预览功能特性支持的敏感信息类型 Jsmoke &#x1f6ac;&#x1f6ac; by Yn8rt ​ 该插件由 Yn8rt师傅 开发&#xff0c;插件可以理解为主动版的hae和apifinder&#xff0c;因为其中的大多数规则我都引用了&a…...

PyCharm中通过命令行执行`pip`命令下载到哪里了:虚拟环境目录下

PyCharm中通过命令行执行pip命令下载到哪里了:虚拟环境目录下 在PyCharm中通过命令行执行pip命令安装工具包,包的下载位置取决于多种因素 虚拟环境 如果项目使用了虚拟环境(通常是推荐的做法): Windows:虚拟环境通常位于项目目录下的.venv文件夹(默认情况)或你指定…...

Spring Boot操作MaxComputer(保姆级教程)

目录 引言 一、引入依赖 二、配置文件 application.properties&#xff08;信息用自己的奥&#xff09; 三、实体类User.java 四、UserController 五、UserService 六、UserDao 七、UserDao.xml 八、postman 访问&#xff0c;成功查询数据 附件(修改和删除数据) 引言…...

Spring的构造注入

1.开发步骤2.构造方法的重载 2.1参数个数不同2.2构造参数个数相同时 3.注入总结 注入&#xff1a;通过Spring的配置文件&#xff0c;为成员变量赋值 Set注入&#xff1a;Spring调用Set方法&#xff0c;通过配置文件&#xff0c;为成员变量赋值 构造注入&#xff1a;Spring调用…...

服务器IPMI用户名、密码批量检查

背景 大规模服务器部署的时候&#xff0c;少不了较多的网管和监测平台&#xff0c;这些平台会去监控服务器的性能、硬件等指标参数&#xff0c;为了便于管理和控制&#xff0c;则需要给服务器IPMI带外管理添加较多的用户&#xff0c;这就需要对较多的服务器检查所对应的IPMI用…...

管理后台环境配置

后端配置及启动 a. 软件安装 1. Java sdk 1.8 2. maven 3.6 3. intellij IDEA 2024 4. Visual C Redistributable 5. mongodb 7.0 6. mysql 8.0 双击安装&#xff1a;mysql-installer-community-8.0.41.0.msi 版本选择&#xff1a;Full&#xff0c;包括服务器和客户端 …...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001

qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类&#xff0c;直接把源文件拖进VS的项目里&#xff0c;然后VS卡住十秒&#xff0c;然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分&#xff0c;导致编译的时候找不到了。因…...