Implementierung von React Routing Guard (Routing-Interception)

Implementierung von React Routing Guard (Routing-Interception)

React unterscheidet sich von Vue. Es implementiert die Routenunterbrechung durch Festlegen von Metazeichen in der Route. Bei Verwendung von Vue bietet das Framework eine Routing-Guard-Funktion, mit der vor dem Betreten einer bestimmten Route einige Überprüfungsarbeiten durchgeführt werden. Wenn die Überprüfung fehlschlägt, springt sie zur 404- oder Anmeldeseite, beispielsweise zur Funktion beforeEnter in Vue:

...
router.beforeEach(async(zu, von, weiter) => {
    const toPath = zu.Pfad;
    const vonPfad = von.Pfad;
})
...

Die Grundidee von React zur Implementierung der Routing-Interception besteht darin, die Renderfunktion von Route zu verwenden. Das Abfangen wird durch die Beurteilung der Abfangbedingungen erreicht, um den Sprung verschiedener Komponenten zu realisieren. In früheren Versionen stellte React Router auch einen ähnlichen onEnter-Hook bereit, aber in React Router 4.0 wurde diese Methode abgebrochen. React Router 4.0 und höher verwendet deklarative Komponenten. Router sind Komponenten. Um die Routing-Guard-Funktion zu implementieren, müssen wir sie selbst schreiben.
Ohne den Routing Guard sieht die Router-Komponente folgendermaßen aus:

importiere * als React von „react“;
importiere { HashRouter, Switch, Route, Redirect } von „react-router-dom“;
 
importiere Index aus "./page/index";
Home aus "./page/home" importieren;
importiere ErrorPage aus "./page/error";
Login aus "./page/login" importieren;
 
export const Router = () => (
    <HashRouter>
        <Schalter>
            <Routenpfad="/" genaue Komponente={Index}/>
            <Routenpfad="/login" genaue Komponente={Login}/>
            <Routenpfad="/home" genaue Komponente={Home}/>
            <Route path="/404" genaue Komponente={ErrorPage}/>
            <Weiterleitung zu="/404" />
        </Schalter>
    </HashRouter>
);

Die obige Router-Komponente enthält drei Seiten:

Login Startseite
404-Seite und vier Routen:
Root-Router-Login-Router Home-Router
404-Routen. Darunter sind sowohl die Root-Route als auch die /home-Route auf die Homepage-Route gerichtet.
Oben ist eine grundlegende Routendefinition, die zwischen der Anmelde-/Startseite und der 404-Seite hin- und herspringen kann, es gibt jedoch auch einige Probleme:
Im nicht angemeldeten Zustand können Sie direkt zur Startseite springen. Im angemeldeten Zustand können Sie auch die Route /login eingeben, um zur Anmeldeseite zu springen. Nun wollen wir die folgende Funktion ausführen:
Im nicht angemeldeten Zustand können Sie nicht direkt zur Startseite springen. Wenn Sie im nicht angemeldeten Zustand zur Startseite springen, müssen Sie zur Anmelderoute umleiten. Im angemeldeten Zustand können Sie nicht zur Anmeldeseite springen. Wenn Sie im angemeldeten Zustand zur Anmeldeseite springen, müssen Sie zur Startseite umleiten. Um diese Funktion zu erfüllen, gibt es zwei Lösungen:
In jeder Komponente wird entsprechend dem Verlaufsobjekt auf den Requisiten gesprungen, um eine globale Routing-Guard-Verarbeitung durchzuführen.

Erstellen Sie zunächst eine Datei routerMap.js im Stammverzeichnis src. Der Code lautet wie folgt:
Wenn Sie „Auth“ auf „True“ setzen, bedeutet dies, dass für die Route eine Berechtigungsüberprüfung erforderlich ist.

/**
 * Definieren Sie die Routing-Komponente und setzen Sie „Auth“ auf „true“, um anzugeben, dass für die Route eine Berechtigungsüberprüfung erforderlich ist.*/

importiere Admin aus "./pages/Admin";
Login aus "./pages/Login" importieren;
Importfehler aus "./pages/Error";

exportiere const routerMap = [
    {Pfad: "/", Name: "admin", Komponente: Admin, Authentifizierung: true},
    {Pfad: "/login", Name: "Login", Komponente: Login},
    {Pfad: "/Fehler", Name: "Fehler", Komponente: Fehler},
];

Alle Routing-Sprünge werden vom FrontendAuth-High-Order-Komponenten-Proxy ausgeführt. Hier ist die Implementierung der Komponente FrontendAuth.js:

/**
 * Routing Guard-Überprüfung */
importiere React, {Component} von „react“;
importiere {Route, Redirect} von „react-router-dom“;

Klasse FrontendAuth erweitert Komponente {
    // eslint-disable-next-line kein nutzloser Konstruktor
    Konstruktor(Requisiten) {
        super(Requisiten);
    }

    rendern() {
        const {routerConfig, location} = diese.props;
        const {Pfadname} = Standort;
        const isLogin = localStorage.getItem("Benutzer");
        console.log(Pfadname, isLogin);
        console.log(Speicherort);
        // Wenn für die Route keine Berechtigungsprüfung erforderlich ist, außer für die Anmeldeseite im angemeldeten Zustand // Denn nach der Anmeldung können Sie nicht zur Anmeldeseite springen // Dieser Teil des Codes dient zum Zugriff auf Routen, für die im nicht angemeldeten Zustand keine Berechtigungsprüfung erforderlich ist const targetRouterConfig = routerConfig.find(
            (Element) => Element.Pfad === Pfadname
        );
        console.log(ZielRouterConfig);
        wenn (targetRouterConfig && !targetRouterConfig.auth && !isLogin) {
            const {Komponente} = ZielRouterConfig;
            zurück <Route exakter Pfad={Pfadname} Komponente={Komponente}/>;
        }
        wenn (istLogin) {
            // Wenn Sie angemeldet sind, möchten Sie zur Anmeldeseite springen und zur Startseite weiterleiten, wenn (Pfadname === "/login") {
                zurück <Umleitung zu="/"/>;
            } anders {
                // Wenn die Route zulässig ist, springe zur entsprechenden Route if (targetRouterConfig) {
                    zurückkehren (
                        <Routenpfad={Pfadname} Komponente={targetRouterConfig.component}/>
                    );
                } anders {
                    // Wenn die Route unzulässig ist, Weiterleitung zur 404-Seite return <Redirect to="/error"/>;
                }
            }
        } anders {
            // Im Nicht-Anmeldestatus, wenn die Route zulässig ist und eine Berechtigungsüberprüfung erfordert, zur Anmeldeseite springen und eine Anmeldung anfordern, wenn (targetRouterConfig && targetRouterConfig.auth) {
                zurückgeben <Umleitung zu="/login"/>;
            } anders {
                // Im nicht angemeldeten Zustand, wenn die Route unzulässig ist, Weiterleitung zu 404
                zurückgeben <Umleitung zu="/error"/>;
            }
        }
    }
}

Standard-FrontendAuth exportieren;

Definieren Sie dann die Router-Komponente. In App.js ist diese Komponente das Ergebnis der Umhüllung durch eine Komponente höherer Ordnung:

importiere „./App.less“;
importiere React, {Fragment} von "react";
importiere {Switch} von ‚react-router-dom‘
importiere FrontendAuth aus "./FrontendAuth";
importiere {routerMap} aus "./routerMap";

Funktion App() {
    zurückkehren (
        <Fragment>
            {/*Nur einen abgleichen, wenn der Abgleich erfolgreich ist, keinen weiteren Abgleich durchführen, hohe Effizienz*/}
            <Schalter>
                <FrontendAuth routerConfig={routerMap}/>
            </Schalter>
        </Fragment>
    );
}

Standard-App exportieren;

prüfen

Dies ist das Ende dieses Artikels über die Implementierung von React Routing Guard (Route Interception). Weitere relevante Inhalte zu React Routing Guard finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Umleitungsmethoden jeder Version des React-Routings
  • React-Router v4: So verwenden Sie den Verlauf, um Routensprünge zu steuern
  • Detaillierte Erklärung, wie React Routing-Parameter in Komponenten erhält
  • So verwenden Sie verschachtelte Routen in react-router4
  • Mehrere Implementierungslösungen für das verzögerte Laden von React-Routen
  • Implementierung der React-Router4-Routenüberwachung
  • Zusammenfassung der Routing-Konfigurationsmethode von React-Router v4
  • So implementieren Sie die React-Routing-Authentifizierung
  • Detaillierte Erläuterung der React-Routing-Konfiguration

<<:  Spezifische Verwendung des Linux-Befehls „dirname“

>>:  MySql-Wissenspunkte: Transaktion, Index, Sperrprinzip und Nutzungsanalyse

Artikel empfehlen

So passen Sie mit CSS einen schöneren Link-Prompt-Effekt an

Vorschlag: Das möglichst häufige handschriftliche ...

Teilen Sie 20 JavaScript-Einzeilencodes

Inhaltsverzeichnis 1. Holen Sie sich den Wert des...

So löschen Sie verstümmelte oder mit Sonderzeichen versehene Dateien in Linux

Aus Kodierungsgründen werden beim Hochladen oder ...

Allgemeine Befehle zum Bereitstellen von InfluxDB und Mongo mit Docker

Bereitstellen einer Datenbank basierend auf Docke...

Problemaufzeichnung bei der Verwendung des Vue+Echarts-Diagramms

Vorwort echarts ist mein am häufigsten verwendete...

Schnelles Verständnis des Vue-Routing-Navigationsschutzes

Inhaltsverzeichnis 1. Globale Wache 1. Globale Fr...

Erfahren Sie mehr über das V-Modell und seine Modifikatoren in einem Artikel

Inhaltsverzeichnis Vorwort Modifikatoren des V-Mo...

Analyse des Sperrmechanismus der MySQL-Datenbank

Bei gleichzeitigen Zugriffen kann es zu nicht wie...

Lokale Vue-Komponentendatenfreigabe Vue.observable()-Nutzung

Wenn Komponenten detaillierter werden, treten Sit...

So ändern Sie den Hostnamen in Linux dauerhaft

Wenn Sie Ihren Hostnamen ändern möchten, können S...

Eine kurze Diskussion über Lösungen zum Stören von CSS3-Animationen

Warum steckt es fest? Es gibt eine Prämisse, die ...