最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React Router V5:使用HOC組件實現(xiàn)路由攔截功能

 更新時間:2023年03月14日 09:31:12   作者:Bennett_G  
這篇文章主要介紹了React Router V5:使用HOC組件實現(xiàn)路由攔截功能,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

前言

在Web應(yīng)用程序中,需要對一些頁面進(jìn)行訪問限制,只允許已經(jīng)登錄的用戶訪問受保護(hù)的頁面。React Router可以通過使用高階組件(Higher-order Components,HOC)實現(xiàn)路由攔截。本文將介紹如何使用React Router實現(xiàn)路由攔截功能。

一、創(chuàng)建一個HOC組件

首先,我們需要創(chuàng)建一個HOC組件,該組件接受一個組件作為參數(shù),并返回一個新的組件。例如,我們可以定義一個名為AuthWrapper的HOC組件

const AuthWrapper = (Component) => {
  // ...
};

二、使用withRouter組件

AuthWrapper組件中,我們可以使用React Router提供的withRouter高階組件,該組件可以將路由信息添加到組件的props中:

import { withRouter } from 'react-router-dom';

const AuthWrapper = (Component) => {
  const WrappedComponent = withRouter((props) => {
    // ...
  });

  return WrappedComponent;
};

三、實現(xiàn)路由攔截

AuthWrapper組件中,可以使用componentDidMount生命周期函數(shù)或者useEffect鉤子函數(shù)來檢查用戶是否已經(jīng)登錄(或者其它業(yè)務(wù)邏輯)。如果用戶沒有登錄,則可以使用history.push()函數(shù)將用戶重定向到登錄頁面:

import { useEffect } from 'react';

const AuthWrapper = (Component) => {
  const WrappedComponent = withRouter((props) => {
    useEffect(() => {
      // 檢查用戶是否已經(jīng)登錄
      const user = localStorage.getItem('user');
      if (!user) {
        // 重定向到登錄頁面
        props.history.push('/login');
      }
    }, [props.history]);

    // 渲染原始組件
    return <Component {...props} />;
  });

  return WrappedComponent;
};

在需要訪問的受保護(hù)的路由中,可以使用AuthWrapper組件來包裝路由組件:

<Route path="/dashboard" component={AuthWrapper(Dashboard)} />

在上面的代碼中,AuthWrapper將路由組件Dashboard作為參數(shù),并返回一個新的組件,該組件可以實現(xiàn)路由攔截。

在應(yīng)用程序中,我們可以使用Route組件來定義路由,將受保護(hù)的Dashboard組件包裝在AuthWrapper組件中,實現(xiàn)路由攔截。如果用戶已經(jīng)登錄,則可以訪問受保護(hù)的路由,如果未登錄,則會被重定向到登錄頁面

至此,我們已經(jīng)成功地使用React Router實現(xiàn)了路由攔截功能。

完整示例

import React, { useEffect } from 'react';
import { Route, Redirect, withRouter } from 'react-router-dom';

// 定義一個HOC組件,用于實現(xiàn)路由攔截
const AuthWrapper = (Component) => {
  // 使用withRouter高階組件,將路由信息作為props傳遞給組件
  const WrappedComponent = withRouter((props) => {
    useEffect(() => {
      // 在組件加載完成后,檢查用戶是否已經(jīng)登錄
      const user = localStorage.getItem('user');
      if (!user) {
        // 如果用戶沒有登錄,則重定向到登錄頁面
        props.history.push('/login');
      }
    }, [props.history]);

    // 如果用戶已經(jīng)登錄,則渲染原始組件
    return localStorage.getItem('user') ? <Component {...props} /> : null;
  });

  // 返回一個新的組件,該組件可以進(jìn)行路由攔截
  return WrappedComponent;
};

// 受保護(hù)的Dashboard組件,需要進(jìn)行路由攔截
const Dashboard = () => {
  return <h1>Dashboard</h1>;
};

// 定義路由
const App = () => {
  return (
    <div>
      <Route path="/dashboard" component={AuthWrapper(Dashboard)} />
      <Route path="/login" component={Login} />
    </div>
  );
};

// 登錄組件
const Login = () => {
  const handleLogin = () => {
    // 模擬登錄成功,將用戶信息保存到localStorage中
    localStorage.setItem('user', 'foo');
  };

  return (
    <div>
      <h1>Login</h1>
      <button onClick={handleLogin}>Login</button>
    </div>
  );
};

到此這篇關(guān)于React Router V5:使用HOC組件實現(xiàn)路由攔截的文章就介紹到這了,更多相關(guān)React Router 路由攔截內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解react-native WebView 返回處理(非回調(diào)方法可解決)

    詳解react-native WebView 返回處理(非回調(diào)方法可解決)

    這篇文章主要介紹了詳解react-native WebView 返回處理(非回調(diào)方法可解決),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • 關(guān)于react中useCallback的用法

    關(guān)于react中useCallback的用法

    這篇文章主要介紹了關(guān)于react中useCallback的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • React實現(xiàn)動態(tài)調(diào)用的彈框組件

    React實現(xiàn)動態(tài)調(diào)用的彈框組件

    這篇文章主要為大家詳細(xì)介紹了React實現(xiàn)動態(tài)調(diào)用的彈框組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • React如何優(yōu)雅的捕獲異常

    React如何優(yōu)雅的捕獲異常

    捕獲異常是來定位你錯誤代碼的。本文主要介紹了 React如何捕獲異常,你知道多少種方法,ErrorBoundary,ErrorBoundary-try-catch等等。本文就來詳細(xì)的介紹一下
    2021-06-06
  • 在react-antd中彈出層form內(nèi)容傳遞給父組件的操作

    在react-antd中彈出層form內(nèi)容傳遞給父組件的操作

    這篇文章主要介紹了在react-antd中彈出層form內(nèi)容傳遞給父組件的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • react-native ListView下拉刷新上拉加載實現(xiàn)代碼

    react-native ListView下拉刷新上拉加載實現(xiàn)代碼

    本篇文章主要介紹了react-native ListView下拉刷新上拉加載實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Ant?Design?組件庫之步驟條實現(xiàn)

    Ant?Design?組件庫之步驟條實現(xiàn)

    這篇文章主要為大家介紹了Ant?Design組件庫之步驟條實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • React Redux使用配置詳解

    React Redux使用配置詳解

    react-redux是redux官方react綁定庫,能夠使react組件從redux store中讀取數(shù)據(jù),并且向store分發(fā)actions以此來更新數(shù)據(jù),這篇文章主要介紹了react-redux的設(shè)置,需要的朋友可以參考下
    2022-08-08
  • React?Streaming?SSR原理示例深入解析

    React?Streaming?SSR原理示例深入解析

    這篇文章主要為大家介紹了React?Streaming?SSR原理示例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 關(guān)于react ant 組件 Select下拉框 值回顯的問題

    關(guān)于react ant 組件 Select下拉框 值回顯的問題

    這篇文章主要介紹了關(guān)于react ant 組件 Select下拉框 值回顯的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評論

白水县| 广水市| 桐城市| 临桂县| 吴忠市| 汝阳县| 新田县| 巴中市| 大关县| 邛崃市| 榆林市| 富顺县| 大悟县| 城固县| 兴业县| 潍坊市| 淳安县| 长治市| 扬州市| 连城县| 宁河县| 贡嘎县| 常德市| 永春县| 孝义市| 渑池县| 原平市| 广元市| 抚州市| 丰镇市| 沙雅县| 青铜峡市| 西和县| 礼泉县| 安丘市| 和田县| 托克托县| 华宁县| 娄烦县| 当阳市| 东乌珠穆沁旗|