2016-03-13 2 views
2

У меня есть эти маршруты, которые я хочу обернуть в метод 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; 
    .... 
}; 
+0

Что мешает вам потребовать «магазин» в вашем модуле 'checkAuth'? – Oleg

+0

'onEnter' не должен вызывать функцию, поэтому я не могу поставить туда скобки и просто передать хранилище в качестве аргумента. –

ответ

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)}.

Или просто используйте обычные функции.

+0

Спасибо. Из вашего ответа выучили несколько новых вещей: вы не можете привязываться к функции стрелки и фабрикам. –

Смежные вопросы