2016-12-15 1 views
1

Je vais avoir un cas assez simple. Je souhaite rediriger le client qui charge ma page d'index vers/dashboard ou/login en fonction de sa connexion ou non. Le problème est que le gestionnaire onEnter est appelé deux fois à chaque fois et je me demande pourquoi. Voici mon code:React routeur OnEnter crochet appelé deux fois

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')); 

Et voici une autre version. Le problème existe dans les deux sens.

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

Je ne sais pas si cela résout votre problème mais peut-être essayer d'envelopper chaque composant dans HOC qui vérifie si l'utilisateur est authentifié et affiche le composant approprié ou redirige vers un autre ... Mais si vous voulez utiliser onEnter je vais essayer enquêter. – magnat

+0

Mettez la méthode 'onEnter' sur le composant App. – Vikramaditya

Répondre

-1

Essayez refactorisation vos itinéraires aime ce

<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> 

Je pense que la route /counter appeler à nouveau votre composant App puis demander à nouveau pour onEnter.

+0

Ne fonctionne pas. Pas de changement – user2080579

3

J'ai trouvé la raison. C'est un bug dans react-router-redux v4.0.7. Il y a un problème enregistré here. Jusqu'à ce qu'un correctif soit fusionné, une rétrogradation vers v4.0.6 le corrige.