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

329
Vistas
React-router: ¿Cómo funcionan las rutas anidadas?

Tengo una aplicación de reacción con react-router. Estoy tratando de configurar rutas anidadas:

 "/" --> home page "/products" --> products list (child component of home page) "/products/new" --> new product: child component of products list

Lo que traté de hacer hasta ahora:

 <Route path="/" component="home" > <Route path="products" component="products" > <Route path="new" component="products_new" /> </Route> </Route>

Ahora, en el navegador de mi página de inicio predeterminada, cuando presiono "/products" , el componente de productos se carga y puedo ver mi lista de productos. Pero cuando presiono "products/new" no pasa nada. Me sale una página en blanco. Si presiono "/new" (no anidado), funciona (la página product_new se carga dentro de su padre). (este "/products/new" no funciona; este "/new" funciona)

Eché un vistazo a esta pregunta en github Problema con rutas anidadas #687 . La solución dice:

Descubrí mi problema. Las rutas principales siempre se llaman. Esa es la intención. Pero los componentes secundarios deben tener <Router.RouteHandler/> repetido para ser renderizados.

No puedo entender esta solución. ¿Qué significa: "pero los componentes secundarios deben haber repetido <Router.RouteHandler/> para renderizarse"?

EDIT1: Aquí están mis componentes (enrutadores y vistas):

  1. Mi jerarquía de enrutamiento:

     <Route path="/" > <IndexRoute component={Home}/> <Route path="products"> <IndexRoute component={Products} /> <Route path="new" component={Products_New} /> </Route> </Route> </Router>
  2. Mi componente de casa:

     <div className="col-lg-12"> <h1>Home page</h1> <hr /> {this.props.children} </div>
  3. Componentes de mis productos:

     <div> <div className="col-lg-12"> <h1>Products</h1> </div> <hr /> {this.props.children} </div>
  4. Mi producto-nuevo componente:

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

¿Has echado un vistazo a IndexRoutes? Si no es así, lea al respecto en la documentación oficial . Su problema aquí es que cuando visita /products/new , react-router intenta representar todos los componentes que están por encima de su ruta products_new .

Este comportamiento está pensado si desea representar un componente secundario dentro del componente principal. Permítame demostrarlo con un par de ejemplos:

Ejemplo 1

Considere el siguiente componente de home que tiene un encabezado y un pie de página que se incluyen en todas las páginas.

 <Header /> <div>{this.props.children}</div> </Footer />

con el siguiente enrutamiento:

 <Route path="/" component={home} > <Route path="products" component={products} /> </Route>
  • Visitar / generaría una página con solo un <Header /> , un <div> vacío y un <Footer /> .
  • Visitar /products mostraría una página como la anterior, pero el <div> ahora contendría su componente <Products /> .

Dado que en su código (probablemente) no representa {this.props.children} , siempre obtendrá el componente principal <Home /> , independientemente de si visitó / o /products .

Este comportamiento es útil para cosas que envuelven los elementos principales de su sitio, como menús, pancartas, barras laterales, etc.


Ejemplo 2

Ahora considere nuevamente el mismo componente de home :

 <Header /> <div>{this.props.children}</div> </Footer />

pero con esta ruta:

 <Route path="/"> <IndexRoute component={home} <Route path="products" component={products} /> </Route>
  • Visitar / generaría una página con solo un <Header /> , un <div> vacío y un <Footer /> .
  • Visitar /products ahora representaría su componente <Products /> por sí solo , sin estar envuelto dentro del componente principal <Home /> .

TL;RD

Si, en cambio, desea que cada ruta represente componentes individuales, y no todo lo que se encuentra debajo del árbol de esa ruta, debe usar la siguiente ruta en su lugar:

 const browserHistory = useRouterHistory(createHistory)({basename: '/'}); ReactDOM.render( <Route history={browserHistory}> <Route path="/"> <IndexRoute component={home} /> <Route path="products" > <IndexRoute component={products} /> <Route path="new" component={products_new} /> </Route> </Route> </Router>, document.getElementById('content') );
over 4 years ago · Santiago Trujillo 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