欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

React封裝高階組件實(shí)現(xiàn)路由權(quán)限的控制詳解

 更新時(shí)間:2025年02月03日 10:42:37   作者:shenyaofeng  
這篇文章主要介紹了React封裝高階組件實(shí)現(xiàn)路由權(quán)限的控制,在React中,為了實(shí)現(xiàn)安全可靠的路由權(quán)限控制,可以通過多種方式來確保只有經(jīng)過授權(quán)的用戶才能訪問特定路徑下的資源,下面來介紹封裝高階組件控制的方法,需要的朋友可以參考下

React高階組件是什么

官方解釋∶

高階組件(HOC)是 React 中用于復(fù)用組件邏輯的一種高級(jí)技巧。HOC 自身不是 React API 的一部分,它是一種基于 React 的組合特性而形成的設(shè)計(jì)模式。

高階組件(HOC)就是一個(gè)函數(shù),且該函數(shù)接受一個(gè)組件作為參數(shù),并返回一個(gè)新的組件,它只是一種組件的設(shè)計(jì)模式,這種設(shè)計(jì)模式是由react自身的組合性質(zhì)必然產(chǎn)生的。我們將它們稱為純組件,因?yàn)樗鼈兛梢越邮苋魏蝿?dòng)態(tài)提供的子組件,但它們不會(huì)修改或復(fù)制其輸入組件中的任何行為。

HOC的優(yōu)缺點(diǎn)

  • 優(yōu)點(diǎn)∶ 邏輯復(fù)用、不影響被包裹組件的內(nèi)部邏輯。
  • 缺點(diǎn)∶hoc傳遞給被包裹組件的props容易和被包裹后的組件重名,進(jìn)而被覆蓋

路由權(quán)限控制做什么

主要就是判斷用戶是否登陸,只有登陸獲取到有效的token,才能跳轉(zhuǎn)到頁面。

思路:

判斷是否有 token ,如果有 token 則返回正常的組件,如果沒有 token 則跳轉(zhuǎn)到登陸頁。

實(shí)現(xiàn):

因?yàn)槭莟s所以先定義參數(shù)類型,這里的ReactElement代表的是一個(gè) React 元素例如:<div/> 或者是組件。之后我們獲取到 token ,通過 token 的有無判斷跳轉(zhuǎn)到相應(yīng)頁面。

代碼

封裝高階組件:

interface AuthRouteProps {
  children: React.ReactElement;
}
export function AuthRoute({ children }: AuthRouteProps) {
  const token = getToken();
  if (token) {
    return <>{children}</>;
  } else {
    // 使用 Navigate 組件進(jìn)行導(dǎo)航
    message.error("請(qǐng)先登錄");
    return <Navigate to="/login" />;
  }
}

在路由配置文件中,引入封裝的組件,例如:

children: [
      {
        index: true,
        element: <Chat />
      },
      {
        path: '/paint',
        element: (
          <AuthRoute><Paint /></AuthRoute>
        )
      },
      {
        path: '/me',
        element: <div>我的</div>
      }
    ]

缺點(diǎn)

目前只是通過判斷 token 有無,如果 token 失效了卻還是會(huì)跳轉(zhuǎn),如果是跳轉(zhuǎn)到的頁面需要攜帶token 則可以在響應(yīng)攔截器中進(jìn)行處理:token 會(huì)發(fā)給后端,后端通過解密后來判斷用戶是否存在

// 添加響應(yīng)攔截器
request.interceptors.response.use(
  function (response) {
    // 2xx 范圍內(nèi)的狀態(tài)碼都會(huì)觸發(fā)該函數(shù)。
    // 對(duì)響應(yīng)數(shù)據(jù)做點(diǎn)什么
    return response.data;
  },
  function (error) {
    // 超出 2xx 范圍的狀態(tài)碼都會(huì)觸發(fā)該函數(shù)。
    // 對(duì)響應(yīng)錯(cuò)誤做點(diǎn)什么
    if(error.status === 401){
      removeToken()
      router.navigate('/login')
      window.location.reload()
    }
    return Promise.reject(error);
  }
);

如果只是單純的跳轉(zhuǎn)頁面的話要進(jìn)行改造也是發(fā)一個(gè)請(qǐng)求給后端,后端通過處理返回給前端 token 是否有效:

export async function AuthRoute({children}){
  const token = getToken();
  // 模擬請(qǐng)求發(fā)給后端token
  const res = await getUserInfo({ token });
  if (res.data.code) {
    return <>{children}</>;
  } else {
    return <Navigate to="/login" replace />;
  }
}

所以要通過具體的業(yè)務(wù)來處理用戶登陸和 token 是否有效。

比較

通過這樣的方式寫和直接在訪問頁面中判斷token有什么區(qū)別?

直接在訪問頁面時(shí)判斷:這種方式通常是在頁面組件加載或渲染時(shí)進(jìn)行的,即在用戶已經(jīng)導(dǎo)航到該頁面后才進(jìn)行檢查。

使用AuthRoute組件:判斷是在路由跳轉(zhuǎn)之前進(jìn)行的。當(dāng)用戶嘗試訪問受保護(hù)的路由時(shí),AuthRoute組件會(huì)首先檢查token,然后決定是否允許訪問或進(jìn)行重定向。

以上就是React封裝高階組件實(shí)現(xiàn)路由權(quán)限的控制詳解的詳細(xì)內(nèi)容,更多關(guān)于React路由權(quán)限控制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • React?跨端動(dòng)態(tài)化核心技術(shù)實(shí)例分析

    React?跨端動(dòng)態(tài)化核心技術(shù)實(shí)例分析

    這篇文章主要為大家介紹了React?跨端動(dòng)態(tài)化核心技術(shù)實(shí)例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 淺談React 服務(wù)器端渲染的使用

    淺談React 服務(wù)器端渲染的使用

    本篇文章主要介紹了淺談React 服務(wù)器端渲染的使用,React是最受歡迎的客戶端 JavaScript 框架,在本教程中,我們將逐步向您介紹服務(wù)器端的渲染示例
    2018-05-05
  • 詳解React獲取DOM和獲取組件實(shí)例的方式

    詳解React獲取DOM和獲取組件實(shí)例的方式

    這篇文章主要介紹了React獲取DOM和獲取組件實(shí)例的方式,如何創(chuàng)建refs來獲取對(duì)應(yīng)的DOM呢?目前有三種方式,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • React事件處理超詳細(xì)介紹

    React事件處理超詳細(xì)介紹

    這篇文章主要介紹了React事件處理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • 詳解React服務(wù)端渲染從入門到精通

    詳解React服務(wù)端渲染從入門到精通

    這篇文章主要介紹了詳解React服務(wù)端渲染從入門到精通,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03
  • React項(xiàng)目動(dòng)態(tài)修改主題顏色的方案

    React項(xiàng)目動(dòng)態(tài)修改主題顏色的方案

    這篇文章主要介紹了React項(xiàng)目動(dòng)態(tài)修改主題顏色的方案,文中通過代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2025-01-01
  • React?Hooks中?useRef和useImperativeHandle的使用方式

    React?Hooks中?useRef和useImperativeHandle的使用方式

    這篇文章主要介紹了React?Hooks中?useRef和useImperativeHandle的使用方式,文中說明了useRef和useCallback一起使用,?可以解決閉包陷阱的問題,本文結(jié)合實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • React?Native?中處理?Android?手機(jī)吞字的解決方案

    React?Native?中處理?Android?手機(jī)吞字的解決方案

    這篇文章主要介紹了React?Native?中處理?Android?手機(jī)吞字的解決方案,作者在 React Native 0.67.4 環(huán)境下,編寫了一個(gè)小 demo 來復(fù)現(xiàn)這個(gè)問題,需要的朋友可以參考下
    2022-08-08
  • React封裝CustomSelect組件思路詳解

    React封裝CustomSelect組件思路詳解

    小編需要封裝一個(gè)通過Popover彈出框里可以自定義渲染內(nèi)容的組件,渲染內(nèi)容暫時(shí)有: 單選框, 復(fù)選框,接下來通過本文給大家分享React封裝CustomSelect組件思路,需要的朋友可以參考下
    2022-07-07
  • 淺談react路由傳參的幾種方式

    淺談react路由傳參的幾種方式

    這篇文章主要介紹了淺談react路由傳參的幾種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評(píng)論