Eu tenho um roteador como abaixo:
<Router history={hashHistory}>
<Route path="/" component={App}>
<IndexRoute component={Index}/>
<Route path="login" component={Login}/>
</Route>
</Router>
Aqui está o que eu quero alcançar:
- Redirecionar o usuário para
/login
se não estiver conectado - Se o usuário tentou acessar
/login
quando já estava logado, redirecione-o para o root/
agora estou tentando verificar o estado do usuário em App
's componentDidMount
, e fazer algo como:
if (!user.isLoggedIn) {
this.context.router.push('login')
} else if(currentRoute == 'login') {
this.context.router.push('/')
}
O problema aqui é que não consigo encontrar a API para obter a rota atual.
Descobri que este problema encerrado sugeria o uso de mixin Router.ActiveState e manipuladores de rota, mas parece que essas duas soluções agora estão obsoletas.
javascript
reactjs
react-router
wxtry
fonte
fonte
this.state.location.pathname
(em vez de adereços).static contextTypes = { router: React.PropTypes.object }
Você pode obter a rota atual usando
const currentRoute = this.props.routes[this.props.routes.length - 1];
... que lhe dá acesso aos adereços do
<Route ...>
componente ativo de nível mais baixo .Dado...
<Route path="childpath" component={ChildComponent} />
currentRoute.path
devoluções'childpath'
ecurrentRoute.component
devoluçõesfunction _class() { ... }
.fonte
this.props.location
perde essas propriedades personalizadas.this.props.routes.length - 2
Se você usar o histórico, o Roteador colocará tudo no local do histórico, como:
this.props.location.pathname; this.props.location.query;
pegue?
fonte
A partir da versão 3.0.0, você pode obter a rota atual chamando:
O código de amostra está abaixo:
var NavLink = React.createClass({ contextTypes: { router: React.PropTypes.object }, render() { return ( <Link {...this.props}></Link> ); } });
fonte
Para todos os usuários com o mesmo problema em 2017, resolvi da seguinte maneira:
NavBar.contextTypes = { router: React.PropTypes.object, location: React.PropTypes.object }
e use-o assim:
componentDidMount () { console.log(this.context.location.pathname); }
fonte
PropTypes
agora é uma dependência autônoma, pensei em adicionar:import PropTypes from 'prop-types'; ... NavBar.contextTypes = { router: PropTypes.object, location: PropTypes.object };
Em
App.js
adicionar o código abaixo e tentativawindow.location.pathname
fonte
Você pode usar o prop 'isActive' assim:
const { router } = this.context; if (router.isActive('/login')) { router.push('/'); }
isActive retornará verdadeiro ou falso.
Testado com react-router 2.7
fonte
Funciona para mim da mesma maneira:
... <MyComponent {...this.props}> <Route path="path1" name="pname1" component="FirstPath"> ... </MyComponent> ...
E então, posso acessar "this.props.location.pathname" na função MyComponent.
Esqueci que era ...))) O link a seguir descreve mais sobre a barra de navegação do make etc .: react router this.props.location
fonte
Tente pegar o caminho usando:
document.location.pathname
Em Javascript você pode o URL atual em partes. Confira: https://css-tricks.com/snippets/javascript/get-url-and-url-parts-in-javascript/
fonte