다음과 같은 라우터가 있습니다.
<Router history={hashHistory}>
<Route path="/" component={App}>
<IndexRoute component={Index}/>
<Route path="login" component={Login}/>
</Route>
</Router>
내가 달성하고 싶은 것은 다음과 같습니다.
/login
로그인하지 않은 경우 사용자를로 리디렉션- 사용자
/login
가 이미 로그인 한 상태에서 액세스를 시도한 경우 루트로 리디렉션합니다./
그래서 지금은에서 사용자의 상태를 확인하기 위해 노력하고있어 App
S ‘ componentDidMount
, 무언가를 좋아한다 :
if (!user.isLoggedIn) {
this.context.router.push('login')
} else if(currentRoute == 'login') {
this.context.router.push('/')
}
여기서 문제는 현재 경로를 가져 오는 API를 찾을 수 없다는 것입니다.
Router.ActiveState mixin 및 라우트 핸들러를 사용하여 제안 된 이 닫힌 문제를 발견 했지만이 두 솔루션은 이제 더 이상 사용되지 않는 것 같습니다.
답변
더 많은 문서를 읽은 후 해결책을 찾았습니다.
https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/api/location.md
다음 location
과 같이 구성 요소 인스턴스의 삽입 된 속성 에 액세스하면됩니다 .
var currentLocation = this.props.location.pathname
답변
다음을 사용하여 현재 경로를 얻을 수 있습니다.
const currentRoute = this.props.routes[this.props.routes.length - 1];
… 가장 낮은 수준의 활성 <Route ...>
구성 요소 에서 소품에 액세스 할 수 있습니다 .
주어진…
<Route path="childpath" component={ChildComponent} />
currentRoute.path
반환 'childpath'
및 currentRoute.component
반환 function _class() { ... }
.
답변
히스토리를 사용하는 경우 라우터는 다음과 같이 모든 것을 히스토리의 위치에 넣습니다.
this.props.location.pathname;
this.props.location.query;
알 겠어요?
답변
버전 3.0.0부터 다음을 호출하여 현재 경로를 가져올 수 있습니다.
this.context.router.location.pathname
샘플 코드는 다음과 같습니다.
var NavLink = React.createClass({
contextTypes: {
router: React.PropTypes.object
},
render() {
return (
<Link {...this.props}></Link>
);
}
});
답변
2017 년에 동일한 문제가 발생한 사용자를 위해 다음과 같은 방법으로 해결했습니다.
NavBar.contextTypes = {
router: React.PropTypes.object,
location: React.PropTypes.object
}
다음과 같이 사용하십시오.
componentDidMount () {
console.log(this.context.location.pathname);
}
답변
에서 것은 App.js
코드와 시도 아래를 추가
window.location.pathname
답변
다음과 같이 ‘isActive’소품을 사용할 수 있습니다.
const { router } = this.context;
if (router.isActive('/login')) {
router.push('/');
}
isActive는 참 또는 거짓을 반환합니다.
react-router 2.7로 테스트