Ok, j'en ai marre d'essayer.
La méthode onEnter
ne fonctionne pas. Une idée pourquoi c'est?
// Authentication "before" filter
function requireAuth(nextState, replace){
console.log("called"); // => Is not triggered at all
if (!isLoggedIn()) {
replace({
pathname: '/front'
})
}
}
// Render the app
render(
<Provider store={store}>
<Router history={history}>
<App>
<Switch>
<Route path="/front" component={Front} />
<Route path="/home" component={Home} onEnter={requireAuth} />
<Route exact path="/" component={Home} onEnter={requireAuth} />
<Route path="*" component={NoMatch} />
</Switch>
</App>
</Router>
</Provider>,
document.getElementById("lf-app")
Modifier:
La méthode est exécutée lorsque j'appelle onEnter={requireAuth()}
, mais ce n'est évidemment pas le but recherché et je ne vais pas non plus obtenir les paramètres souhaités.
onEnter
n'existe plus sur react-router-4
. Vous devez utiliser <Route render={ ... } />
pour obtenir les fonctionnalités souhaitées. Je crois Redirect
exemple a votre scénario spécifique. Je l'ai modifié ci-dessous pour correspondre au vôtre.
<Route exact path="/home" render={() => (
isLoggedIn() ? (
<Redirect to="/front"/>
) : (
<Home />
)
)}/>
De react-router-v4 onEnter
, onUpdate
et onLeave
est supprimé, conformément à la documentation sur migration de v2/v3 vers v4 :
on*
propriétés
React Router v3 fournit les méthodesonEnter
,onUpdate
etonLeave
. Celles-ci étaient essentiellement en train de recréer les méthodes du cycle de vie de React.Avec v4, vous devez utiliser les méthodes de cycle de vie du composant rendu par un
<Route>
. Au lieu deonEnter
, vous utiliseriezcomponentDidMount
oucomponentWillMount
. Où vous utiliseriezonUpdate
, vous pouvez utilisercomponentDidUpdate
oucomponentWillUpdate
(ou éventuellementcomponentWillReceiveProps
).onLeave
peut être remplacé parcomponentWillUnmount
.