У меня довольно простой случай. Я хочу перенаправить клиентскую загрузку моей индексной страницы в/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'));
Я не уверен, разрешил ли он вашу проблему, но, возможно, попытается обернуть каждый компонент в HOC, который проверяет, прошел ли аутентификация пользователя и отображает соответствующий компонент или перенаправляется на другой. Но если вы хотите использовать onEnter, я попытаюсь исследовать его. – magnat
Поместите метод 'onEnter' в компонент App. – Vikramaditya