将redux存储绑定到函数

时间:2016-03-13 19:01:42

标签: javascript reactjs redux

我想将这些路由包含在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

1 个答案:

答案 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)}

或者只使用普通功能。