似乎如果我在root onEnter或onChange hook中更改路径,则url将无限变化。但是,如果我改变子路线中的路径,它将起作用。实际上我想在一个地方处理身份验证,否则每个子路由都应该处理相同的逻辑。
{
path: '/',
onChange: function(prevState, nextState, replace, callback) {
if(!logined) {
replace('login');
}
},
childRoutes: [
....
]
}
答案 0 :(得分:0)
由于onChange
在replace
试
onChange: function(prevState, {location:{pathname:next}}, replace)=> {
if(!logined && next !== '/login') {
replace('/login');
}
}
还要在一个地方处理身份验证,你可以使用HOC,类似
const CheckAuth = (isLogined, redirectPath) => Component =>
class CheckAuth extends React.Component {
componentWillUpdate(nextProps, nextState){
//Check auth on change
this.checkAuth(nextProps);
}
componentWillMount(){
//Check auth on enter
this.checkAuth(this.props);
}
checkAuth({location}){
if(!isLogined && location.pathname!==redirectPath) {
browserHistory.replace(redirectPath);
}
}
render(){
return (<Component {...this.props}/>);
}
};
和App组件
class App extends React.Component { ... }
export default CheckAuth(isLogined,'/login')(App);
还有一种方法