react ejemplo react-router react-router-v4

react-router - react router ejemplo



Rutas anidadas en React Router v4 (5)

Estoy tratando de configurar algunas rutas anidadas para agregar un diseño común. Mira el código:

<Router> <Route component={Layout}> <div> <Route path=''/abc'' component={ABC} /> <Route path=''/xyz'' component={XYZ} /> </div> </Route> </Router>

Si bien esto funciona perfectamente bien, sigo recibiendo la advertencia:

Advertencia: no debe usar <Componente de ruta> y <Niños de ruta> en la misma ruta; será ignorado


Debe usar el componente de conmutación para anidar para que funcione bien. Además, vea esta question

// main app <div> // not setting a path prop, makes this always render <Route component={AppShell}/> <Switch> <Route exact path="/" component={Login}/> <Route path="/dashboard" component={AsyncDashboard(userAgent)}/> <Route component={NoMatch}/> </Switch> </div>

Y los componentes de la versión 4 no aceptan niños, en su lugar, debe usar el accesorio de render.

<Router> <Route render={(props)=>{ return <div>Whatever</div>}> </Route> </Router>


La respuesta de CESCO muestra primero el componente AppShell luego uno de los componentes dentro de Switch . Pero estos componentes NO se renderizarán dentro de AppShell , NO serán hijos de AppShell .

En v4 para envolver componentes, ya no coloca sus Route dentro de otra Route , coloca sus Route directamente dentro de un componente.
IE: para la envoltura en lugar de <Route component={Layout}> utiliza directamente <Layout> .

Código completo:

<Router> <Layout> <Route path=''/abc'' component={ABC} /> <Route path=''/xyz'' component={XYZ} /> </Layout> </Router>

El cambio probablemente se explica por la idea de hacer que React Router v4 sea puro React para que solo use elementos React como con cualquier otro elemento React.

EDITAR: eliminé el componente Switch ya que no es útil aquí. Vea cuándo es útil here .


Si no desea que Layout ejecute en cargado. Usa este método:

<div className="container"> <Route path="/main" component={ChatList}/> <Switch> <Route exact path="/" component={Start} /> <Route path="/main/single" component={SingleChat} /> <Route path="/main/group" component={GroupChat} /> <Route path="/login" component={Login} /> </Switch> </div>

Cada vez que cambie el historial, se ejecutará componentWillReceiveProps en la ChatList.


También puedes probar esto :

<Route exact path="/Home" render={props=>( <div> <Layout/> <Archive/> </div> )} />


Tratar:

<Router> <Layout> <Route path=''/abc'' component={ABC} /> <Route path=''/xyz'' component={XYZ} /> </Layout> </Router>