我想将这些路由包含在checkAuth
方法中,以查看访问者的会话状态。为了保持代码清洁,我将import {checkAuth} from 'helpers/core'
export default ( store ) => {
return (
<Router history={browserHistory} onEnter={checkAuth.bind(store)}>
<Route path={AUTH_ROUTE} component={AuthLayout}>
<IndexRoute component={AuthView}/>
</Route>
<Route component={CoreLayout}>
<Route path={DASHBOARD_ROUTE} component={AuthView}/>
</Route>
</Router>
)
}
方法分离为一个单独的文件,并将其导入带有路由声明的文件中:
checkAuth
store
需要console.log(this)
读取状态并发送一些操作,所以我不确定如何传递它。我尝试使用bind,你可以在我的代码中看到,但checkAuth
在方法中返回undefined。
以下是export const checkAuth = ( desiredRoute, redirect ) => {
console.log(this);// returns undefined
const state = this.getState();// Cannot read property 'getState' of undefined
const isAuthenticated = state.auth.loggedIn;
....
};
代码:
csv
答案 0 :(得分:3)
您正在使用箭头功能,因此您无法bind
向他们发送任何内容。这就是您的控制台调用返回undefined
的原因。
您可以直接在checkAuth
模块中导入商店:
import store from 'path/to/store';
export const checkAuth = ( desiredRoute, redirect ) => {
const state = store.getState();
}
并将其简单地用作onEnter={checkAuth}
。
或者你可以建厂:
export const checkAuth = ( store ) => ( desiredRoute, redirect ) => {
const state = store.getState();
}
并将商店传递给onEnter={checkAuth(store)}
。
或者只使用普通功能。