У меня есть эти маршруты, которые я хочу обернуть в метод checkAuth
, чтобы увидеть состояние сеанса посетителя. Чтобы сохранить код в чистоте Я отделил метод checkAuth
в отдельный файл и импортировать его в файл с маршрутами декларации:Связывание магазина redux с функцией
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)
возвращает undefined внутри метода.
Вот checkAuth
код:
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;
....
};
Что мешает вам потребовать «магазин» в вашем модуле 'checkAuth'? – Oleg
'onEnter' не должен вызывать функцию, поэтому я не могу поставить туда скобки и просто передать хранилище в качестве аргумента. –