react 實現路由攔截

簡單介紹下項目背景,我這里做了一個demo,前端使用mock數據,然后實現簡單的路由攔截,校驗session是否包含用戶作為已登錄的依據,react-router-dom是v6。不像vue可以設置登錄攔截beforeenter,react需要我們自己加。

//router.js
import React, { lazy } from "react";
import { Navigate } from 'react-router-dom'const Error = lazy(() => import("@/pages/Error/Error.jsx"))
const Index = lazy(() => import("@/pages/Index/Index.jsx"))
const Login = lazy(() => import("@/pages/Login/Login.jsx"))export const routes = [{path: "/",element: <Navigate to="/index"/>},{path: "/login",element: <Login />},{path: "/index",element: <Index />},{path: "*",element: <Error />},
]
import React, { useEffect, Suspense } from 'react'
import { useRoutes, useNavigate } from 'react-router-dom'
import { routes } from './router'export default function Index() {const element = useRoutes(routes)return (<Authen route={element} children={element.children}><Suspense><div>{element}</div></Suspense></Authen>)}
//實現路由攔截
const Authen = (props) => {const navigate = useNavigate()const { route, children } = propsconst username = sessionStorage.getItem('username')console.log(props);useEffect(() => {if (route.props.match.pathname === "/login" && username) {navigate('/index')}}, [route, navigate,username])return children
}

Surpense組件是react組件懶加載的時候,路由跳轉了,由于網絡原因,組件內容無法及時過去,不添加會報錯。?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/696813.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/696813.shtml
英文地址,請注明出處:http://en.pswp.cn/news/696813.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

外包干了3個月,技術退步明顯

先說一下自己的情況&#xff0c;本科生&#xff0c;19年通過校招進入廣州某軟件公司&#xff0c;干了接近4年的功能測試&#xff0c;今年年初&#xff0c;感覺自己不能夠在這樣下去了&#xff0c;長時間呆在一個舒適的環境會讓一個人墮落!而我已經在一個企業干了四年的功能測試…

Linux之用戶和用戶組的深入了解

目錄 一、簡介 1.1、用戶&#xff1a; 1.2、用戶組 1.3、UID和GID 1.3、用戶賬戶分類 查看用戶類別 超級用戶root(0) 程序用戶(1~499) 普通用戶(500~65535) 二、用戶 2.1、添加新的用戶賬號&#xff1a;useradd 2.2、刪除賬號&#xff1a;userdel 有-r與沒有-r區別…

OSDI 2023: Hyrax Fail-in-Place Server Operation in Cloud Platforms

我們使用以下6個分類標準對本文的研究選題進行分析: 1. 硬件故障類型 DRAM: 此類別涉及研究如何處理內存相關的錯誤。這包括單比特錯誤,使用傳統 ECC 進行校正,以及需要冗余、修復技術或隔離故障內存區域的更廣泛的故障。磁盤: 此處研究將解決存儲故障,尤其是 SSD 中的故障…

運維07:堡壘機

什么是跳板機 跳板機就是一臺服務器而已&#xff0c;運維人員在使用管理服務器的時候&#xff0c;必須先連接上跳板機&#xff0c;然后才能去操控內網中的服務器&#xff0c;才能登錄到目標設備上進行維護和操作 開發小張 ---> 登錄跳板機 ---> 再登錄開發服務器 測試…

貸齊樂系統最新版SQL注入(無需登錄繞過WAF可union select跨表查詢)

一、環境 已上傳資源&#xff08;daiqile&#xff09; 二、代碼解釋 1.1Request 不管get請求還是post請求都可以接收到 1.2過濾的還挺多 1.3第二個WAF把數據分為兩個了一個Key一個value&#xff0c;全是explode的功勞 1.4submit是if進入的前提 很明顯走進來了 1.5那我們在這…

學習JAVA的第三天(基礎)

目錄 流程控制語句 順序結構 分支結構 循環結構 分類&#xff1a; 練習 跳轉控制語句 練習 數組 數組介紹 數組的定義和靜態初始化 數組定義 數組的靜態初始化 數組元素訪問 數組遍歷 數組動態初始化 JAVA內存分配 流程控制語句 順序結構 是Java程序默認的執行流程…

UIKit 在 UICollectionView 中拖放交換 Cell 視圖的極簡實現

概覽 UIKit 中的 UICollectionView 視圖是我們顯示多列集合數據的不二選擇&#xff0c;而豐富多彩的交互操作更是我們選擇 UICollectionView 視圖的另一個重要原因。 如上圖所示&#xff1a;我們實現了在 UICollectionView 中拖放交換任意兩個 Cell 子視圖的功能&#xff0c;這…

js如何判斷一個對象中某一個屬性存在并且有值

在JavaScript中&#xff0c;可以使用不同的方法來判斷一個對象中某個屬性是否存在并且有值。以下是幾種常見的方法&#xff1a; 1、使用hasOwnProperty()方法&#xff1a;該方法用于檢查對象是否具有指定的屬性。可以通過以下方式來判斷屬性是否存在并且有值&#xff1a; if (…

整理了去年的一些運維面試題一

Ingress的yaml文件需要包含哪些&#xff1f; CICD搭建流程&#xff1f; JAVA程序打包工具&#xff1f; 如何檢測Linux端口如何通信&#xff1f; k8s集群之間如何通信的&#xff1f; docker組成部分&#xff1f; 20位掩碼有多少主機IP&#xff1f; 在linux中四個T的硬盤使用什…

Zabbix 遠程監控主機

目錄 1、安裝 Zabbix 安裝客戶端 服務端測試通訊 Web頁面添加主機 2、監控 Nginx 自定義腳本監控 Nginx web配置臺 3、監控 MySQL 配置模版文件 配置Web界面 1、安裝 Zabbix node-12 作為zabbix的被監控端&#xff0c;提供mysql服務器&#xff0c;配置zabbix監控node…

jquery寫組件滑動人機驗證組件

jquery組件&#xff0c;雖然 jquery 語法古老&#xff0c;但是寫好了用起來真的很爽啊&#xff0c;本文用滑動人機驗證給大家做個詳細教程&#xff08;直接復制代碼就可以用噢o(*&#xffe3;▽&#xffe3;*)ブ&#xff09; 第一步 先看下組件本身 component.js (function() {…

Nginx網絡服務三-----(三方模塊和內置變量)

1.驗證模塊 需要輸入用戶名和密碼 我們要用htpasswd這個命令&#xff0c;先安裝一下httpd 生成文件和用戶 修改文件 訪問頁面 為什么找不到頁面&#xff1f; 對應的路徑下&#xff0c;沒有這個文件 去創建文件 去虛擬機瀏覽器查看 有的頁面不想被別人看到&#xff0c;可以做…

【UI自動化】使用poco框架進行元素唯一定位

直接選擇&#xff1a; 1.poco(text買入).click() 2.poco("android.widget.ImageView").click()相對選擇、空間選擇&#xff1a; 3.poco(text/name).parent().child()[0].click()正則表達式&#xff1a; 4.listpoco(textMatches".*ETF")今天主要想記錄下…

centos 系統盤 放到 win pc 中的異常解決

有一塊 2.5 480g sata ssd&#xff0c;之前是筆記本電腦的centos系統盤&#xff0c;后來沒用了&#xff0c;打算掛到臺式機上當下載盤。臺式機pc的主板是華碩 h610m-a。 難點一&#xff1a; 因為臺式pc上已經掛了兩塊3.5 hdd&#xff0c;發現sata的電源線都在3.5hdd附近&#…

利用RBI(Remote Browser Isolation)技術訪問ChatGPT

系統組網圖 #mermaid-svg-Bza2puvd8MudMbqR {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Bza2puvd8MudMbqR .error-icon{fill:#552222;}#mermaid-svg-Bza2puvd8MudMbqR .error-text{fill:#552222;stroke:#552222;…

300分鐘吃透分布式緩存-10講:MC是怎么定位key的?

我們在進行 Mc 架構剖析時&#xff0c;除了學習 Mc 的系統架構、網絡模型、狀態機外&#xff0c;還對 Mc 的 slab 分配、Hashtable、LRU 有了簡單的了解。本節課&#xff0c;將進一步深入學習這些知識點。 接下來&#xff0c;進入 Memcached 進階的學習。會講解 Mc 是如何進行…

QT應用軟件【協議篇】周立功CAN接口卡代碼示例

文章目錄 USBCAN系列CAN接口卡規格參數資料下載QT引用周立功的庫安裝sdk代碼USBCAN系列CAN接口卡 USBCAN系列CAN接口卡兼容USB2.0全速規范,可支持1/2/4/8路CAN接口。采用該接口卡,PC機可通過USB連入CAN網絡,進行CAN總線數據采集和處理,主要具備以下幾大優勢特點: 支持車載…

正交匹配追蹤(Orthogonal Matching Pursuit, OMP)的MATLAB實現

壓縮感知&#xff08;Compressed Sensing, CS&#xff09;是一種利用稀疏信號的先驗知識&#xff0c;用遠少于奈奎斯特采樣定理要求的樣本數目恢復整個信號的技術。正交匹配追蹤&#xff08;Orthogonal Matching Pursuit, OMP&#xff09;是一種常見的貪婪算法&#xff08;Gree…

【CF】團隊訓練賽2 J-Palindrome Reversion 題解

傳送門&#xff1a;Palindrome Reversion 標簽&#xff1a;字符串 題目大意 規定一個操作&#xff1a;選擇字符串中的一段區間[l,r]并使其翻轉。現在給出一個字符串s&#xff0c;你要判斷能否通過一次操作使其變為回文串。 輸入&#xff1a;一個字符串&#xff0c;其長度不超…

在蘋果電腦MAC上安裝Windows10(雙系統安裝的詳細圖文步驟教程)

在蘋果電腦MAC上安裝Windows10&#xff08;雙系統安裝的詳細圖文步驟教程&#xff09; 一、準備工作準備項1&#xff1a;U盤作為系統安裝盤準備項2&#xff1a;您需要安裝的系統鏡像 二、啟動轉換助理步驟1&#xff1a;找到啟動轉換助理步驟2&#xff1a;啟動轉換助理步驟3&…