es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Actualicé a React-router 6 y mi código está roto, ¿qué cambios tendría que hacer?

Estoy intentando adaptar esto a v6, sin embargo, parece que no he obtenido correctamente la sintaxis. Este código funciona perfectamente cuando se utiliza react-router v5.

Sé por ejemplo que la sintaxis de enrutamiento cambia.

Urls.js
import React from "react";
import { BrowserRouter, Route, Switch, Redirect } from "react-router-dom";

import Login from “./components/Login”;
import Home from “./components/Home”;

// Un contenedor para que redirige a la pantalla de inicio de sesión si aún no estás autenticado.

function PrivateRoute({ isAuthenticated, children, …rest}) {
return (

isAuthenticated ? (
children
) : (

)
}
/>
);
}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución

    Para adaptar este código a react-router v6, es necesario hacer algunos cambios en la sintaxis de enrutamiento.

    1. Cambiar la declaración de importación a:
      import { BrowserRouter, Route, Routes, Navigate } from "react-router-dom";
    2. Reemplazar el componente Switch por el componente Routes.

    3. Reemplazar Redirect por el componente Navigate.

    4. Reemplazar la propiedad render en Routes por la propiedad element.

    El código actualizado debería verse así:

    import React from "react";
    import { BrowserRouter, Route, Routes, Navigate } from "react-router-dom";
    
    import Login from "./components/Login";
    import Home from "./components/Home";
    
    function PrivateRoute({ isAuthenticated, children, ...rest}) {
      return (
        <route {...rest}="" element="{isAuthenticated" children="" :=""></route><navigate to="/login/"></navigate>}
        />
      );
    }
    
    function App() {
      const isAuthenticated = true; // reemplazar con la lógica real de autenticación
      return (
        <browserrouter>
          <routes>
            <route path="/" element=""></route><home></home>} />
            <route path="/login/" element=""></route><login></login>} />
            <privateroute path="/dashboard/" isauthenticated="{isAuthenticated}" element=""></privateroute><dashboard></dashboard>} />
          </routes>
        </browserrouter>
      );
    }
    
    export default App;
    

    Se debe tener en cuenta que el componente PrivateRoute no ha cambiado significativamente, pero ahora se utiliza con el componente Routes. Además, hay que destacar que la propiedad element toma el componente a renderizar en lugar de una función render.

Comments are closed.