EDITVedi altra risposta per i nuovi, non deprecata sintassi reagire-router
C'è un buon esempio di come utilizzare il gancio onEnter
nel auth-flow example. Ecco il codice rilevante:
function requireAuth(nextState, replaceState) {
if (!auth.loggedIn())
replaceState({ nextPathname: nextState.location.pathname }, '/login')
}
render((
<Router history={history}>
<Route path="/" component={App}>
<Route path="login" component={Login} />
<Route path="logout" component={Logout} />
<Route path="about" component={About} />
<Route path="dashboard" component={Dashboard} onEnter={requireAuth} />
</Route>
</Router>
), document.getElementById('example'))
Come si può vedere, quando il percorso /dashboard
si accede alla funzione requireAuth
è chiamato. Riceve due argomenti: nextState
, che è un oggetto RouterState
che rappresenta lo stato che l'utente sta per immettere e replaceState
, uno RedirectFunction
che può essere chiamato per sostituire quello stato con qualcos'altro. In questo caso, se l'utente non è connesso, requireAuth
chiamate replaceState
simili:
replaceState({ nextPathname: nextState.location.pathname }, '/login')
Il secondo argomento è ovviamente il percorso l'utente viene reindirizzato. Il primo argomento è un oggetto che può contenere qualsiasi dato che vogliamo che il gestore di route (in questo caso il componente Login
) abbia. Qui il nome percorso che l'utente stava cercando di andare a (/dashboard
) è impostato come proprietà nextPathname
, quindi dopo aver effettuato l'accesso l'utente può essere reindirizzato a quella pagina (vedere il metodo handleSubmit
nel componente Login
).
Se l'utente è connesso, requireAuth
non fa nulla, e dal momento che non è mai chiamato replaceState
il percorso funziona come al solito, vale a dire la componente Dashboard
è reso.
fonte
2015-11-19 05:57:42
Grazie per questa risposta esauriente! – Jason
Uso il rendering universale e sfortunatamente questo metodo comporta 302 reindirizzamenti. C'è un modo in cui sarei in grado di utilizzare reindirizzamenti 301 in caso di richiesta di un server? –