Tengo un enrutador como el siguiente:
<Router history={hashHistory}>
<Route path="/" component={App}>
<IndexRoute component={Index}/>
<Route path="login" component={Login}/>
</Route>
</Router>
Esto es lo que quiero lograr:
- Redirigir al usuario a
/login
si no ha iniciado sesión - Si el usuario intentó acceder
/login
cuando ya había iniciado sesión, redirigirlo a la raíz/
así que ahora estoy tratando de comprobar el estado del usuario en App
's componentDidMount
, y luego hacer algo como:
if (!user.isLoggedIn) {
this.context.router.push('login')
} else if(currentRoute == 'login') {
this.context.router.push('/')
}
El problema aquí es que no puedo encontrar la API para obtener la ruta actual.
Encontré que este problema cerrado sugería usar Router.ActiveState mixin y controladores de ruta, pero parece que estas dos soluciones ahora están en desuso.
javascript
reactjs
react-router
wxtry
fuente
fuente
this.state.location.pathname
(en lugar de accesorios).static contextTypes = { router: React.PropTypes.object }
Puede obtener la ruta actual usando
const currentRoute = this.props.routes[this.props.routes.length - 1];
... que le da acceso a los accesorios del
<Route ...>
componente activo de nivel más bajo .Dado...
<Route path="childpath" component={ChildComponent} />
currentRoute.path
devoluciones'childpath'
ycurrentRoute.component
devolucionesfunction _class() { ... }
.fuente
this.props.location
pierde estas propiedades personalizadas.this.props.routes.length - 2
Si usa el historial, entonces Router puso todo en la ubicación del historial, como:
this.props.location.pathname; this.props.location.query;
¿Consíguelo?
fuente
A partir de la versión 3.0.0, puede obtener la ruta actual llamando a:
El código de muestra está a continuación:
var NavLink = React.createClass({ contextTypes: { router: React.PropTypes.object }, render() { return ( <Link {...this.props}></Link> ); } });
fuente
Para cualquier usuario que tuviera el mismo problema en 2017, lo resolví de la siguiente manera:
NavBar.contextTypes = { router: React.PropTypes.object, location: React.PropTypes.object }
y utilícelo así:
componentDidMount () { console.log(this.context.location.pathname); }
fuente
PropTypes
es ahora una dependencia independiente, pensado para agregar:import PropTypes from 'prop-types'; ... NavBar.contextTypes = { router: PropTypes.object, location: PropTypes.object };
En
App.js
agregue el siguiente código e intentewindow.location.pathname
fuente
Podrías usar el prop 'isActive' así:
const { router } = this.context; if (router.isActive('/login')) { router.push('/'); }
isActive devolverá verdadero o falso.
Probado con react-router 2.7
fuente
Funciona para mí de la misma manera:
... <MyComponent {...this.props}> <Route path="path1" name="pname1" component="FirstPath"> ... </MyComponent> ...
Y luego, puedo acceder a "this.props.location.pathname" en la función MyComponent.
Olvidé que era yo soy ...))) El siguiente enlace describe más para hacer la barra de navegación, etc .: reaccionar enrutador this.props.location
fuente
Intenta tomar el camino usando:
document.location.pathname
En Javascript puede la URL actual en partes. Consulte: https://css-tricks.com/snippets/javascript/get-url-and-url-parts-in-javascript/
fuente