Me gustaría ver una title
en la <AppBar />
que de alguna manera se pasa por la ruta actual.
En React Router v4, ¿cómo podría <AppBar />
pasar la ruta actual a su title
utilería?
<Router basename='/app'>
<main>
<Menu active={menu} close={this.closeMenu} />
<Overlay active={menu} onClick={this.closeMenu} />
<AppBar handleMenuIcon={this.handleMenuIcon} title='Test' />
<Route path='/customers' component={Customers} />
</main>
</Router>
¿Hay una manera de pasar un título personalizado a partir de un encargo prop
de <Route />
?
reactjs
react-router
react-router-v4
Raphael Rafatpanah
fuente
fuente
Respuestas:
En la versión 5.1 de react-router hay un gancho llamado useLocation , que devuelve el objeto de ubicación actual. Esto puede ser útil en cualquier momento que necesite saber la URL actual.
fuente
redirect
se utilizó un enrutador . esto leerá el camino antes de la redirecciónEn el router de reacción 4, la ruta actual está en -
this.props.location.pathname
. Solo obténthis.props
y verifica. Si aún no ve,location.pathname
entonces debe usar el decoradorwithRouter
.Esto podría verse más o menos así:
fuente
window.location.pathname
Si está utilizando reaccionar de plantillas, donde al final de su apariencia reaccionan de archivo como este:
export default SomeComponent
es necesario utilizar el componente de orden superior (a menudo referido como un "ESPECIAL"),withRouter
.Primero, necesitarás importar
withRouter
así:A continuación, querrás usar
withRouter
. Puede hacerlo cambiando la exportación de su componente. Es probable que quieras cambiar deexport default ComponentName
aexport default withRouter(ComponentName)
.Luego puede obtener la ruta (y otra información) de los accesorios. Específicamente,
location
,match
, yhistory
. El código para escupir el nombre de ruta sería:Una buena reseña con información adicional está disponible aquí: https://reacttraining.com/react-router/core/guides/philosophy
fuente
Aquí hay una solución usando
history
Leer másRouter interior
fuente
this.props....
lo que sea es solo ruido para nuestros oídos.Hay un gancho llamado useLocation en react-router v5, no necesita HOC u otras cosas, es muy sucinto y conveniente.
fuente
Creo que el autor de React Router (v4) acaba de agregar eso con Router HOC para apaciguar a ciertos usuarios. Sin embargo, creo que el mejor enfoque es usar render prop y hacer un componente PropsRoute simple que pase esos accesorios. Esto es más fácil de probar ya que no "conecta" el componente como lo hace withRouter. Tenga un montón de componentes anidados envueltos con Router y no va a ser divertido. Otro beneficio es que también puede usar este pase a través de los accesorios que desee para la ruta. Aquí está el ejemplo simple usando render prop. (más o menos el ejemplo exacto de su sitio web https://reacttraining.com/react-router/web/api/Route/render-func ) (src / components / routes / props-route)
uso: (aviso para obtener los parámetros de ruta (match.params) puede usar este componente y se los pasará por usted)
También tenga en cuenta que de esta manera puede pasar cualquier accesorio adicional que desee
fuente
Ha dicho Con Posidielov , la ruta actual está presente en
this.props.location.pathname
.Pero si desea hacer coincidir un campo más específico como una clave (o un nombre), puede usar matchPath para encontrar la referencia de ruta original.
fuente
Añadir
Luego cambie su exportación de componentes
Luego puede acceder a la ruta directamente dentro del componente en sí (sin tocar nada más en su proyecto) usando:
Probado en marzo de 2020 con: "versión": "5.1.2"
fuente