2016-04-02 2 views
2

Router 2.0. Ich habe meine Route so eingerichtet.Wie OnEnter Funktion auf Route in React Router aufrufen Mehrere

Wie Sie sehen können, mache ich onEnter = {logger.log} mehrmals, was redudant ist.

Ich habe versucht, onEnter-Handler auf root Route der App, aber es rief diese Handler-Funktion nur einmal aufgerufen. Es wird nicht für ex aufgerufen, wenn ich von der Anmeldung zur Anmeldung navigiere.

Gibt es eine Möglichkeit, OnEnter aller Routen zu deklarieren, logger.log nur einmal aufzurufen, so dass ich nicht immer wieder dasselbe wiederholen muss.

Antwort

5

können Sie die OnChange Haken an der Strecke Wurzel verwenden

onChange(prevState, nextState, replace, callback?)

Genannt auf Strecken, wenn die Lage ändert, aber die Strecke selbst weder oder Blätter eintritt. Dies wird beispielsweise aufgerufen, wenn sich die untergeordneten Elemente einer Route ändern oder wenn sich die Standortabfrage ändert. Es stellt den vorherigen Router-Status, den nächsten Router-Status und eine Funktion zum Weiterleiten an einen anderen Pfad bereit. this ist die Routeninstanz, die den Hook ausgelöst hat. Wenn callback als viertes Argument aufgeführt ist, wird dieser Hook asynchron ausgeführt, und der Übergang wird blockiert, bis callback aufgerufen wird.

wie so

<Route path='/' component={app} onChange={logger.log} > 
    <IndexRoute component={require('./dashboard')} /> 
    <Route path='signup' component={require('./signup')} /> 
    <Route path='login' component={require('./login')} /> 
</Route> 

zur Kenntnis, dass die Signatur unterscheidet, so dass Sie sicher logger.log machen müßten die notwendigen Daten aus nextState in diesem Fall greift.