如何使用react-router
重定向componentWillMountexport class NewStock extends React.Component {
constructor(props, context) {
super(props, context);
}
componentWillMount() {
const { session, dispatch, router } = this.props
if (session.userSessionData.get('logged_in') == false) {
router.transitionTo('/login')
}
};
此代码:
router.transitionTo('/login')
只返回:
Uncaught TypeError: router.transitionTo is not a function
答案 0 :(得分:11)
尝试this.props.history
:
const { history } = this.props
history.pushState(null, '/login') or
history.replaceState(null, '/login')
如果您的模块不是路由器的直接后代,您仍然可以通过将组件包装在withRouter(YourComponent)
HOC(第4版)中来访问此道具。
答案 1 :(得分:2)
我正在做的是使用路线的onEnter
道具。这使我可以更好地集中我的身份验证。我的灵感来自the react-router examples
我来到这里是因为我和你一样笨手笨脚,但很快陷入了无法控制的巨大代码。
希望所有人来到这里,你会从我的错误中吸取教训。
function requireAuth(nextState, replace) {
if (!UserStore.userIsSignedIn()) {
replace({
pathname: '/login',
state: {nextPathname: nextState.location.pathname}
})
}
}
render((
<Router history={hashHistory}>
<Route path="/" component={PageHeader}>
<IndexRoute component={AssignmentOverview} onEnter={requireAuth}/>
<Route path="login" component={UserLoginForm}/>
<Route path="logout" component={UserLogout}/>
<Route path="profile" component={UserProfile} onEnter={requireAuth}/>
<Route path="assignmentform" component={AssignmentForm} onEnter={requireAuth}/>
</Route>
</Router>
), document.getElementById('content'));