Lorsque vous incluez un composant de page principale dans votre application, il est souvent enveloppé dans un <Route>
composant comme celui-ci:
<Route path="/movies" component={MoviesIndex} />
En faisant cela, le MoviesIndex
composant a accès à this.props.history
afin qu'il puisse rediriger l'utilisateur avec this.props.history.push
.
Certains composants (généralement un composant d'en-tête) apparaissent sur chaque page, ils ne sont donc pas encapsulés dans un <Route>
:
render() {
return (<Header />);
}
Cela signifie que l'en-tête ne peut pas rediriger l'utilisateur.
Pour contourner ce problème, le composant d'en-tête peut être encapsulé dans une withRouter
fonction, soit lors de son exportation:
export default withRouter(Header)
Cela donne au Header
composant l'accès à this.props.history
, ce qui signifie que l'en-tête peut désormais rediriger l'utilisateur.
withRouter
donne également accès àmatch
etlocation
. Ce serait bien si la réponse acceptée mentionnait cela, car la redirection de l'utilisateur n'est pas le seul cas d'utilisationwithRouter
. C'est une belle auto-qna autrement.