2016-12-15 3 views
1

У меня довольно простой случай. Я хочу перенаправить клиентскую загрузку моей индексной страницы в/dashboard или/login на основе того, вошли ли они в систему или нет. Проблема в том, что onEnter обработчик вызывается дважды каждый раз, и мне интересно, почему. Вот мой код:React Router OnEnter hook, вызываемый дважды

ReactDOM.render(
<div> 
    <Provider store={ store }> 
    <Router history={ history }> 
     <Route path="/" component={ App }> 
      <IndexRoute onEnter={ requireAuth }/> 
      <Route path="/login" component={ Login } /> 
      <Route path="/dashboard" component={ Dashboard } /> 
     </Route> 
    </Router> 
    </Provider> 
</div>, 
document.getElementById('root')); 

И вот альтернативная версия. Проблема существует в обоих направлениях.

ReactDOM.render(
<div> 
    <Provider store={ store }> 
    <Router history={ history }> 
     <Route path="/" component={ App }> 
      <IndexRedirect to="/counter" /> 
      <Route path="/login" component={ Login } /> 
      <Route path="/counter" component={ Counter } onEnter={ requireAuth } /> 
     </Route> 
    </Router> 
    </Provider> 
</div>, 
document.getElementById('root')); 
+0

Я не уверен, разрешил ли он вашу проблему, но, возможно, попытается обернуть каждый компонент в HOC, который проверяет, прошел ли аутентификация пользователя и отображает соответствующий компонент или перенаправляется на другой. Но если вы хотите использовать onEnter, я попытаюсь исследовать его. – magnat

+0

Поместите метод 'onEnter' в компонент App. – Vikramaditya

ответ

-1

Попробуйте рефакторинга ваши маршруты любит это

<Provider store={ store }> 
    <Router history={ history }> 
     <Route path="/" component={ App }> 
      <IndexRedirect to="counter" /> 
      <Route path="login" component={ Login } /> 
      <Route path="counter" component={ Counter } onEnter={ requireAuth } /> 
     </Route> 
    </Router> 
</Provider> 

Я думаю, что маршрут /counter снова звонит App компонент, а затем снова просить onEnter.

+0

Не работает. Без изменений – user2080579

3

Я нашел причину. Это ошибка в реакции-router-redux v4.0.7. Существует проблема, зарегистрированная here. До тех пор, пока исправление не будет объединено, его обновление до версии 4.0 будет исправлено.

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