Considera lo siguiente:
var AppRoutes = [
<Route handler={App} someProp="defaultProp">
<Route path="/" handler={Page} />
</Route>,
<Route handler={App} someProp="defaultProp">
<Route path="/" handler={Header} >
<Route path="/withheader" handler={Page} />
</Route>
</Route>,
<Route handler={App} someProp="defaultProp">
<Route path=":area" handler={Area} />
<Route path=":area/:city" handler={Area} />
<Route path=":area/:city/:locale" handler={Area} />
<Route path=":area/:city/:locale/:type" handler={Area} />
</Route>
];
Tengo una plantilla de aplicación, una plantilla de encabezado y un conjunto de rutas parametrizadas con el mismo controlador (dentro de la plantilla de aplicación). Quiero poder servir rutas 404 cuando no se encuentra algo. Por ejemplo, / CA / SanFrancisco debería ser encontrado y manejado por Area, mientras que / SanFranciscoz debería 404.
Así es como pruebo rápidamente las rutas.
['', '/', '/withheader', '/SanFranciscoz', '/ca', '/CA', '/CA/SanFrancisco', '/CA/SanFrancisco/LowerHaight', '/CA/SanFrancisco/LowerHaight/condo'].forEach(function(path){
Router.run(AppRoutes, path, function(Handler, state){
var output = React.renderToString(<Handler/>);
console.log(output, '\n');
});
});
El problema es / SanFranciscoz siempre está siendo manejado por la página de Área, pero quiero que sea 404. Además, si agrego un NotFoundRoute a la primera configuración de ruta, todas las páginas de Área 404.
<Route handler={App} someProp="defaultProp">
<Route path="/" handler={Page} />
<NotFoundRoute handler={NotFound} />
</Route>,
¿Qué estoy haciendo mal?
Aquí hay una esencia que se puede descargar y experimentar.
react-router
4m1r
fuente
fuente
Respuestas:
DefaultRoute y NotFoundRoute se eliminaron en react-router 1.0.0.
Me gustaría enfatizar que la ruta predeterminada con el asterisco debe ser la última en el nivel de jerarquía actual para que funcione. De lo contrario, anulará todas las demás rutas que aparecen después en el árbol porque es la primera y coincide con cada ruta.
Para react-router 1, 2 y 3
Si desea mostrar un 404 y mantener la ruta (la misma funcionalidad que NotFoundRoute)
Si desea mostrar una página 404 pero cambiar la url (la misma funcionalidad que DefaultRoute)
Ejemplo con múltiples niveles:
Para react-router 4 y 5
Mantener el camino
Redireccionar a otra ruta (cambiar url)
¡El orden importa!
fuente
<Redirect from='*' to='/home' />
en esta sintaxis:const routes = { component: Main, childRoutes: [ { path: '/', component: Home }, ], indexRoute: { component: Main, }, };
<Route render={(props)=> <MyComponent myProp={someVar} {...props} />} />
En las versiones más recientes de react-router, desea ajustar las rutas en un Switch que solo representa el primer componente coincidente. De lo contrario, vería múltiples componentes renderizados.
Por ejemplo:
fuente
path="*"
en la ruta NotFound. Omitirpath
hará que la ruta coincida siempre.path
por completo las rutas desconocidasCon la nueva versión de React Router (usando 2.0.1 ahora), puede usar un asterisco como ruta para enrutar todas las 'otras rutas'.
Entonces se vería así:
fuente
Esta respuesta es para react-router-4. Puede ajustar todas las rutas en el bloque Switch, que funciona igual que la expresión de mayúsculas y minúsculas, y representa el componente con la primera ruta coincidente. p.ej)
Cuándo usar
exact
Sin exacto:
Con exacto:
Ahora, si acepta parámetros de enrutamiento y resulta incorrecto, puede manejarlo en el componente de destino. p.ej)
Ahora en ProfilePage.js
Para obtener más detalles, puede consultar este código:
App.js
ProfilePage.js
fuente
De acuerdo con la documentación , se encontró la ruta , aunque el recurso no.
Por lo tanto, siempre puede agregar una línea
Router.run()
antesReact.render()
para verificar si el recurso es válido. Simplemente pase un accesorio al componente o anule elHandler
componente con uno personalizado para mostrar la vista NotFound.fuente
<Route path="*" to="/dest" />
o<Redirect from="*" to="/dest" />
como la última sub ruta para que coincida, creoAcabo de echar un vistazo rápido a su ejemplo, pero si lo entendí de la manera correcta, está tratando de agregar rutas 404 a segmentos dinámicos. Tuve el mismo problema hace un par de días, encontré # 458 y # 1103 y terminé con un cheque hecho a mano dentro de la función de renderizado:
¡Espero que ayude!
fuente