Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

231
Vistas
Mostrar u ocultar el componente según la ruta actual en React Router Dom

Quiero mostrar u ocultar NewsLetter según la ruta actual. Por ejemplo, lo quiero oculto para las páginas de inicio de login y register , es decir, (ruta de inicio de sesión y registro). He intentado usar useLocation pero no se puede usar fuera del enrutador.

Espero obtener una buena solución para poder renderizar la barra de navegación y el pie de página en condiciones similares. Aquí está mi código actual dentro App.js :

 <BrowserRouter> <Wrapper> <Announcement /> <Navbar /> <Routes> <Route index path="/" element={<Home />}></Route> <Route path="/products" element={<ProductList />}></Route> <Route path="/products/:category" element={<ProductList category="true" />}></Route> <Route path="/product/:id" element={<Product />}></Route> <Route path="/register" element={isAuthenticated ? <Navigate replace to="/" /> : <Register />}></Route> <Route path="/login" element={isAuthenticated ? <Navigate replace to="/" /> : <Login />}></Route> <Route path="/account" element={isAuthenticated ? <Navigate replace to="/" /> : <Account />}></Route> <Route path="/forgot-password" element={isAuthenticated ? <Navigate replace to="/" /> : <ForgotPassword />}></Route> <Route path="/cart" element={<Cart />}></Route> <Route path="/wishlist" element={<Wishlist />}></Route> <Route path="/orders/tracking" element={<Tracking />}></Route> <Route path="/orders/checkout" element={<Checkout />}></Route> </Routes> <Newsletter /> </Wrapper> <Footer /> </BrowserRouter>
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Primera solución

Simplemente puede dejar el componente Newsletter donde está dentro de BrowserRouter y cambiar su contenido como se muestra a continuación. Al usar useLocation , representa su contenido o devuelve un JSX vacío según la ruta.

 import { useLocation } from "react-router-dom"; const Newsletter = () => { // ... const { pathname } = useLocation(); // ... if (pathname === "/login" || pathname === "/register") { return <></>; } // render actual content return <div></div>; }; export default Newsletter;

Segundo

Otra forma es controlar todo en un solo lugar creando un Layout.js , así:

 import { Outlet, useLocation } from "react-router-dom"; const Layout = () => { const { pathname } = useLocation(); return ( <> <Announcement /> <Navbar /> <Outlet /> {pathname !== "/login" && pathname !== "/register" && <Newsletter />} </> ); }; export default Layout;

Luego cambie sus rutas configuradas como se muestra a continuación. Observe el componente Layout . Asegúrate de importarlo:

 <BrowserRouter> <Wrapper> <Routes> <Route element={<Layout />}> <Route index path="/" element={<Home />}></Route> <Route path="/products" element={<ProductList />}></Route> <Route path="/products/:category" element={<ProductList category="true" />}></Route> <Route path="/product/:id" element={<Product />}></Route> <Route path="/register" element={isAuthenticated ? <Navigate replace to="/" /> : <Register />}></Route> <Route path="/login" element={isAuthenticated ? <Navigate replace to="/" /> : <Login />}></Route> <Route path="/account" element={isAuthenticated ? <Navigate replace to="/" /> : <Account />}></Route> <Route path="/forgot-password" element={isAuthenticated ? <Navigate replace to="/" /> : <ForgotPassword />}></Route> <Route path="/cart" element={<Cart />}></Route> <Route path="/wishlist" element={<Wishlist />}></Route> <Route path="/orders/tracking" element={<Tracking />}></Route> <Route path="/orders/checkout" element={<Checkout />}></Route> <Route> </Routes> </Wrapper> <Footer /> </BrowserRouter>
about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede ser que estés buscando esto:

 window.location.pathname
about 4 years ago · Juan Pablo Isaza Denunciar

0

Tal vez intente con la ruta anidada usando el componente Outlet en Newsletter

 <BrowserRouter> <Wrapper> <Announcement /> <Navbar /> <Routes > <Route exact path="/" element={<Newsletter />} > <Route index element={<Home />}></Route> <Route path="products" element={<ProductList />}></Route> <Route path="products/:category" element={<ProductList category="true" />}></Route> <Route path="product/:id" element={<Product />}></Route> <Route path="register" element={isAuthenticated ? <Navigate replace to="/" /> : <Register />}></Route> <Route path="login" element={isAuthenticated ? <Navigate replace to="/" /> : <Login />}></Route> <Route path="account" element={isAuthenticated ? <Navigate replace to="/" /> : <Account />}></Route> <Route path="forgot-password" element={isAuthenticated ? <Navigate replace to="/" /> : <ForgotPassword />}></Route> <Route path="cart" element={<Cart />}></Route> <Route path="wishlist" element={<Wishlist />}></Route> <Route path="orders/tracking" element={<Tracking />}></Route> <Route path="orders/checkout" element={<Checkout />}></Route> </Route> </Routes> </Wrapper> <Footer /> </BrowserRouter>

y en el componente Newsletter

 const Newsletter = () => { ... your conditions return ( <Outlet /> ... newsletter content ) }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda