react-router实现路由拦截,useLocation,useNavigate钩子

news2024/11/16 9:41:22

路由拦截

react-router中没有直接给出拦截路由的方法,需要手动的去监听路由的变化来拦截路由

路由拦截的要点:

  • 能够识别出目标路由和原始路由(区分跳转前和跳转后)
  • 能够在跳转时(跳转前或者跳转后)执行一些操作,比如阻止路由,或者附带参数等等

 根据上面的要求,可以使用useLocationuseEffect钩子函数快速实现,

useLocation会返回当前路由路径的对象,它包含以下参数

location.hash

        当前 URL 的哈希值。

location.key

        此位置的唯一键。

location.pathname

        当前 URL 的路径。

location.search

        当前 URL 的查询字符串(?后的参数部分)。

location.state

        由 <Link state> 或 navigate 创建的位置的状态值。

 在跳转前后使用useLocation就可以记录跳转前后的URL路径,再通过useEffect钩子监听URL,就能实现路由变化时执行一些操作,这样就达成了路由拦截的两个条件

路由示例

使用react-router提供的useLocation,useNavigate钩子函数,模拟实现路由跳转时重定向(类似未登录,跳转登录界面的效果)

实现思路

使用useLocation获取到指定的目标路由(未登录不能访问),然后重定向到其他页面

import { useEffect } from "react";
import { Link ,Outlet, useLocation,useNavigate} from "react-router-dom"


function App() {
  const location = useLocation();
  const navigate = useNavigate();

  useEffect(()=>{
    console.log(location)
    if(location.pathname == '/my'){// 如果当前页面时个人页
      // 重定向到首页
      console.log('重定向到首页')
      navigate('/');
    }
  },[location.pathname])

  return (
    <>
    <nav>
      <Link to='/'>home </Link>
      <Link to='/about'>about </Link>
      <Link to='/my'>my </Link>
    </nav>
      <Outlet></Outlet>
    </>
  )
}

export default App

这样就成功拦截了这个跳转,并重定向到了首页

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

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

相关文章

MySql性能调优04-[MySql事务与锁机制原理]

MySql事务与锁机制原理 从undo与redo日志&#xff0c;理解事务底层ACID底层原理事务四大隔离级别底层实现原理 从undo与redo日志&#xff0c;理解事务底层ACID底层原理 事务特性原子性&#xff1a;当前事务操作要么同时成功&#xff0c;要么同时失败。原子性由undo log日志来保…

银河麒麟高级服务器操作系统 V10 SP3 2403

系统简介 银河麒麟高级服务器操作系统V10是一款为企业级关键业务设计的新一代自主服务器操作系统&#xff0c;它满足虚拟化、云计算、大数据等时代需求&#xff0c;具备高可靠性、安全性、性能和扩展性。该系统基于CMMI5级标准开发&#xff0c;支持多种国产处理器平台&#xf…

【邀请函】庭田科技邀您第五届中国国际复合材料科技大会

第五届中国国际复合材料科技大会暨第七届国际复合材料产业创新成果技术展示&#xff08;ICIE7-新疆&#xff09;将于7月25-27日在新疆乌鲁木齐-国际会展中心举行。上海庭田信息科技有限公司将携多款仿真模拟软件亮相本次大会&#xff0c;诚挚欢迎各位到场咨询了解&#xff01; …

实战演练-2021年电赛国一之三端口DC-DC变换器

文章目录 前言一、题目二、题目分析1、题目要求解析2、题目方案选定方案一(使用buck-boost电路&#xff0b;双向DC-DC电路&#xff08;前端&#xff09;)方案二(使用同步整流Boost升压电路&#xff0b;双向DC-DC电路&#xff08;前端&#xff09;)方案三(使用同步整流Boost升压…

基于随机森林与XGBoost模型的机器故障关键因素分析

1.项目背景 在现代工业环境中,机器故障预测已成为提升生产效率和减少停机时间的关键因素,准确预测机器故障能够帮助企业制定预防性维护计划,降低维护成本,提高设备的使用寿命和生产线的连续性。通过深入分析影响机器故障的主要因素,可以帮助企业更好地理解机器运行状态,…

MySQL的插入(DML)

1.给指定字段添加数据 这个就是&#xff0c;想插入所对应的字段&#xff0c;就插入所对应的数值。先把字段列出来&#xff0c;不一定是全部的字段&#xff0c; 然后插入想要的值&#xff0c;注意&#xff0c;只能插入一行。 INSERT INTO 表名 (字段1,字段2,.....) VALUES(值…

车流量统计YOLOV8+DEEPSORT

车流量统计&#xff0c;YOLOV8NANODEEPSORT资源-CSDN文库 车流量统计YOLOV8DEEPSORT&#xff0c;目前支持PYTHON,C开发 PYTHON版本&#xff0c;需要YOLOV8&#xff0c;依赖PYTORCH C版本&#xff0c;只需要OPENCV

无人机光电吊舱技术详解

无人机光电吊舱是一种集成了多种光电探测设备的载荷系统&#xff0c;安装在无人机下方或侧面&#xff0c;用于实现无人机的目标搜索、识别、跟踪和定位等功能。光电吊舱系统通常由稳定平台、光学成像设备、红外成像设备、激光测距设备、惯性导航设备等组成&#xff0c;能够在各…

【C++深度探索】全面解析多态性机制(二)

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 &#x1f525; 所属专栏&#xff1a;C从入门至进阶 这里将会不定期更新有关C/C的内容&#xff0c;欢迎大家点赞&#xff0c;收藏&#xff0c;评论&#x1f973;&#x1f973;&#x1f389;&#x1f389;&#x1f389; 前言 我…

web零碎知识

在后端想要发送一个JSON对象可以使用Gson // 使用 Gson 将对象转换为 JSON 字符串Gson gson new Gson();String json gson.toJson(user); 就会把一个对象转化为一个JSON字符串&#xff0c; // 设置响应内容类型为 JSONresponse.setContentType("application/json&quo…

卷积神经网络-猫狗识别实战

课程来自bilibiliMomodel平台 全长只有两个小时&#xff0c;理论部分讲得很粗糙 1 人的视觉和计算机视觉 人的大脑&#xff1a;神经元细胞&#xff0c;轴突发送信号&#xff0c;树突接收信号&#xff0c;互相连接&#xff0c;连接的强度和状态会随着新的经历刺激而变化。 用…

尚硅谷Vue3入门到实战,最新版vue3+TypeScript前端开发教程

Vue3 编码规范 创建vue3工程 基于vite创建 快速上手 | Vue.js (vuejs.org) npm create vuelatest 在nodejs环境下运行进行创建 按提示进行创建 用vscode打开项目 安装依赖 源文件有src 内有main.ts App.vue 简单分析 编写src vue2语法在三中适用 vue2中的date metho…

C++基础知识:冒泡排序(利用C++实现冒泡排序)

1.冒泡排序的作用: 最常用也是简单的排序算法&#xff0c;对数组内元素进行排序 2.冒泡排序的具体步骤&#xff1a; 1.比较相邻的元素。如果第一个比第二个大&#xff0c;就交换他们两个。 2.对每一对相邻元素做同样的工作&#xff0c;执行完毕后&#xff0c;找到第一个最大值…

关于思维和智能体模型的思考(2)

在关于思维和智能体模型的思考&#xff08;1&#xff09;一文中&#xff0c;我们提出了思维和Agent 模型&#xff0c;提出了使用确定连接的智能体构建的思维模型。本文我们继续讨论思维与智能体&#xff0c;重点探讨另一种智能体-自主智能体&#xff0c;并且提出了自主智能体的…

《黑马点评》Redis高并发项目实战笔记【完结】P1~P72

花费4周敲完《黑马点评》的课程&#xff0c;做了详细的笔记&#xff0c;感觉受益匪浅&#xff0c;一直一直都在不停成长着。 突然想起《苍穹外卖》系列至今已收获200个赞&#xff0c;500个收藏&#xff0c;好评颇多&#xff0c;私信我的人不计其数&#xff0c;在此谢谢大家。 …

从零开始学习PX4源码3(如何上传官网源码到自己的仓库中)

目录 文章目录 目录摘要1.将PX4源码上传至腾讯工蜂2.从腾讯工蜂克隆源码到本地ubuntu3.如何查看自己源码的版本信息 摘要 本节主要记录从零开始学习PX4源码3(如何上传官网源码到自己的仓库中)及如何查看PX4的固件版本信息&#xff0c;欢迎批评指正&#xff01; PX4源码版本V1.…

东软“引战”国家队 通用技术“补链”大国重器

向来低调温和的东软创始人刘积仁&#xff0c;这一次抛出了“王炸”级的资产交易。 7月3日&#xff0c;《多肽链》获得一则足以引爆国内医疗设备行业的投资信息&#xff1a;被东软集团视为核心资产、掌上明珠的东软医疗&#xff0c;成功引入通用技术集团资本有限公司与中国国有…

240713_昇思学习打卡-Day25-LSTM+CRF序列标注(4)

240713_昇思学习打卡-Day25-LSTMCRF序列标注&#xff08;4&#xff09; 最后一天咯&#xff0c;做第四部分。 BiLSTMCRF模型 在实现CRF后&#xff0c;我们设计一个双向LSTMCRF的模型来进行命名实体识别任务的训练。模型结构如下&#xff1a; nn.Embedding -> nn.LSTM -&…

前端练习小项目——方向感应名片

前言&#xff1a;在学习完HTML和CSS之后&#xff0c;我们就可以开始做一些小项目了&#xff0c;本篇文章所讲的小项目为——方向感应名片 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 在开始学习之前&#xff0c;先让我们看一…

C++客户端Qt开发——开发环境

一、QT开发环境 1.安装三个部分 ①C编译器&#xff08;gcc&#xff0c;cl.exe……) ②QT SDK SDK-->软件开发工具包 比如&#xff0c;windows版本QT SDK里已经内置了C的编译器&#xff08;内置编译器是mingw&#xff0c;windows版本的gcc/g&#xff09; ③QT的集成开发…