Wie kann ich in React Router v6 umleiten?

Lesezeit: 5 Minuten

Benutzeravatar von Hongbo Miao
Hongbo Miao

Ich versuche, auf React Router v6 zu aktualisieren (react-router-dom 6.0.1).

Hier ist mein aktualisierter Code:

import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom';

<BrowserRouter>
  <Routes>
    <Route path="/" element={<Home />} />
    <Route path="/lab" element={<Lab />} />
    <Route render={() => <Navigate to="/" />} />
  </Routes>
</BrowserRouter>

Das Letzte Route leitet den Rest der Pfade um /.

Allerdings ist mir ein Fehler unterlaufen

TS2322: Geben Sie ‘{ render: () => Element; }“ kann dem Typ „IntrinsicAttributes & (PathRouteProps | LayoutRouteProps | IndexRouteProps)“ nicht zugewiesen werden. Die Eigenschaft „render“ ist für den Typ „IntrinsicAttributes & (PathRouteProps | LayoutRouteProps | IndexRouteProps)“ nicht vorhanden.

Allerdings basierend auf die Dokumentationhat es render zum Route. Wie kann ich es richtig verwenden?

  • Das sieht nach einem Fehler in der Dokumentation aus. Beachte wie direkt im Abschnitt darüber sie verwarfen render zugunsten von children? Aber es sieht so aus, als ob der Abschnitt, in dem Sie Gespräche über das Upgrade von v5 auf v5.1 gelesen haben, nur entfernt wurde render in v6. Sieht aus wie <Route element={<Navigate to="/" />} /> ist der neue Stil.

    – Bergi

    7. November 2021 um 1:40 Uhr

  • gist.github.com/mjackson/…

    – Bergi

    7. November 2021 um 1:44 Uhr

  • Auch von gist.github.com/mjackson/…: “Wenn Sie endlich ein Upgrade auf v6 durchführen, konvertieren Sie <Route render={() => ...}> zu <Route element={...}> und du bist fertig.

    – Bergi

    7. November 2021 um 1:48 Uhr

  • Dank @Bergi gelingt mir ein kleines Update: <Route path="*" element={<Navigate to="/" />} />gerne als Antwort posten!

    – Hongbo Miao

    7. November 2021 um 6:06 Uhr

Benutzeravatar von RodolfoSilva
Rodolfo Silva

Ich denke, Sie sollten den No-Match-Route-Ansatz verwenden.

Überprüfen Sie dies in der Dokumentation: Hinzufügen einer „No Match“-Route

import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom';

<BrowserRouter>
  <Routes>
    <Route path="/" element={<Home />} />
    <Route path="/lab" element={<Lab />} />
    <Route
        path="*"
        element={<Navigate to="/" replace />}
    />
  </Routes>
</BrowserRouter>

Um den Verlauf sauber zu halten, sollten Sie einstellen replace Stütze. Dadurch werden zusätzliche Weiterleitungen vermieden, nachdem der Benutzer zurück geklickt hat.

  • Wenn Sie externe Reaktionskomponenten oder ohne Hooks umleiten möchten, sehen Sie sich diese Antwort an.

    – totymedli

    10. Februar um 6:56 Uhr

  • Was wäre wenn / ist eine übergeordnete Route zu diesen anderen? Wie verhindert man / sich selbst davon abhält, eine Route zu sein, zu der navigiert werden kann? Und stattdessen umleiten / sagen /home Wenn home ist ein Kind unter /?

    – Douglas Gaskell

    24. April um 8:52 Uhr

  • Beachten Sie, dass dies keine SSR-Unterstützung für statisches Routing hat 👍🏻

    – Neil

    11. Mai um 10:46 Uhr

  • @KashifAli In diesem Fall sollten Sie die Navigationskomponente durch Ihren benutzerdefinierten Not Found-Bildschirm ersetzen. Ich glaube nicht, dass Sie beide einen Platzhalterpfad verwenden können. Sie können jedoch einen verschachtelten Ansatz verwenden, um einzuschränken, wann der Benutzer innerhalb eines bestimmten Pfads umgeleitet werden soll.

    – RodolfoSilva

    16. Juni um 18:00 Uhr

  • Gibt es API-Dokumente zum Navigieren und Ersetzen? Es scheint, dass ich mit den Dokumenten hätte aufhören sollen, aber irgendwie endete ich hier.

    – Kalte Hände

    19. September um 11:37 Uhr

Benutzeravatar von Hamedo Esk
Hamedo Esk

Ich habe einen anderen Weg gefunden, dies zu tun:

import { useNavigate } from "react-router-dom";
let navigate = useNavigate();

useEffect(() => {
   if (LoggedIn){
      return navigate("/");
   }
},[LoggedIn]);

Sehen Übersicht, Navigation.

  • Es heißt, useNavigator kann nur im Kontext des Routers verwendet werden. Es kann nicht alleine verwendet werden.

    – Zain Sadaqat

    16. Oktober um 14:32 Uhr

Erstellen Sie die Datei RequireAuth.tsx

import { useLocation, Navigate } from "react-router-dom";
import { useAuth } from "../hooks/Auth";

export function RequireAuth({ children }: { children: JSX.Element }) {
  let { user } = useAuth();
  let location = useLocation();

  if (!user) {
    return <Navigate to="/" state={{ from: location }} replace />;
  } else {
    return children;
  }
}

Importieren Sie die Komponente, um dem Benutzer einen privaten Router zu benötigen:

import { Routes as Switch, Route } from "react-router-dom";

import { RequireAuth } from "./RequireAuth";
import { SignIn } from "../pages/SignIn";
import { Dashboard } from "../pages/Dashboard";

export function Routes() {
  return (
    <Switch>
      <Route path="/" element={<SignIn />} />
      <Route
        path="/dashboard"
        element={
          <RequireAuth>
            <Dashboard />
          </RequireAuth>
        }
      />
    </Switch>
  );
}

Benutzeravatar von Ayush Nanda
Ayush Nanda

In Version 5 von React, dh reagieren-router-dom, hatten wir die Umleitungskomponente. Aber in Version 6 von React wird es auf die Navigate-Komponenten aktualisiert.

Wir können Ersetzen in diesen Komponenten übergeben, um unnötige Weiterleitungen beim Klicken auf die Vor- und Zurück-Option zu vermeiden.

Demonstration für die Verwendung ist unten beigefügt:

<Route  path="/" element={user ? <Home /> : <Register />} />
<Route path="/login" element={user ? <Navigate to="/" replace /> :  <Login />}  />
<Route path = "/register" element={user ? <Navigate to="/" replace /> :  <Register />} />

import { useState } from "react"
import { Navigate } from "react-router-dom"
const [login, setLogin] = useState(true)
return (<>
{!login && <Navigate to="/login" />}
<>)

Joundills Benutzeravatar
Joundill

import { useNavigate } from "react-router-dom";
import { Button } from "@mui/material";

const component =()=>{

    const navigate = useNavigate();

    const handelGoToLogin = () => {
        navigate('/auth/login')
    }

    return(<>
        //.........
    
        <Button onClick={handelGoToLogin} variant="outlined" color="primary" size="large" fullWidth>
             Back
        </Button>

    </>)
}

Benutzeravatar von Peter Mortensen
Peter Mortensen

Für Klassenkomponenten sollten Sie zuerst eine funktionale Komponente erstellen und dann HOC technical verwenden, um useNavigate zu verwenden Haken reagieren.

So was:

Datei withrouter.js

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

export const withRouter = WrappedComponent => props => {
    return (<WrappedComponent {...props} navigate={useNavigate()}/>);
};

Verwenden Sie es dann in anderen Klassenkomponenten wie folgt:

export default withRouter(Signin);

Und verwenden Sie Requisiten für die Weiterleitung wie folgt:

this.props.navigate("https://stackoverflow.com/");

1431540cookie-checkWie kann ich in React Router v6 umleiten?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy