Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

175
Views
React Router6: problema al pasar el elemento a la ruta privada

Estoy tratando de crear un componente PrivateRoute como:

 import { useStoreState } from 'easy-peasy'; import React, { Component } from 'react'; import { Navigate, Route } from 'react-router-dom'; // import styles from'./index.module.scss'; interface PrivateRouteProps { path: string; element: Component; } const PrivateRoute: React.FC<PrivateRouteProps> = ({ path, element, children, ...props }) => { const isLoggedIn = useStoreState((state: any) => state.user.isLoggedIn); if (!isLoggedIn) { return <Navigate to="/login" />; } return ( <Route path={path} element={element} {...props}> {children} </Route> ); }; export default PrivateRoute;

y así es como estoy tratando de usarlo:

 function App() { return ( <div className={styles.app}> <Router> <Routes> <Route path="" element={<Home />}></Route> <Route path="login" element={<Login />}></Route> <PrivateRoute path="cohort" element={MyComponent}></PrivateRoute> </Routes> </Router> </div> ); }

pero mientras uso PrivateRoute recibo este error: ingrese la descripción de la imagen aquí

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Mi intento anterior del element: React.ComponentType<any> resolvió el error mecanografiado pero luego el nuevo error fue

Error: [PrivateRoute] no es un componente. Todos los elementos secundarios de deben ser <Route> o <React.Fragment>

Por lo tanto, con el enrutador de reacción v6, solo los componentes de ruta pueden ser hijos de rutas. consulte los documentos v6 y verá que el patrón de autenticación es usar un componente contenedor para manejar la verificación de autenticación y la redirección.

El antiguo patrón v5 ya no funcionará.

Así es como debería verse su PrivateRoute . He comentado el código anterior para que puedas ver los cambios que he hecho.

 import { useStoreState } from "easy-peasy"; import React, { Component } from "react"; import { Navigate, Route } from "react-router-dom"; // import styles from'./index.module.scss'; interface PrivateRouteProps { path: string; element: React.ComponentType<any>; // element: Component; } // const PrivateRoute: React.FC<PrivateRouteProps> = ({ // path, // element, // children, // ...props // }) => { const PrivateRoute = ({ children }: { children: JSX.Element }) => { const isLoggedIn = useStoreState((state: any) => state.user.isLoggedIn); if (!isLoggedIn) { return <Navigate to="/login" />; } // return ( // <Route path={path} element={element} {...props}> // {children} // </Route> // ); return children; }; export default PrivateRoute;

Y, su componente de App se verá así

 export function App() { return ( <div> <Router> <Routes> <Route path="" element={<Home />}></Route> <Route path="login" element={<Login />}></Route> {/* <PrivateRoute path="cohort" element={MyComponent}></PrivateRoute> */} <Route path="cohort" element={ <PrivateRoute> <MyComponent /> </PrivateRoute> } /> </Routes> </Router> </div> ); }

Y aquí el enlace a codesandbox https://codesandbox.io/s/reactrouterv6wayofdoingthings-0nmkg?file=/src/App.tsx

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!