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 MoviesIndexcomposant a accès à this.props.historyafin 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 withRouterfonction, soit lors de son exportation:
export default withRouter(Header)
Cela donne au Headercomposant l'accès à this.props.history, ce qui signifie que l'en-tête peut désormais rediriger l'utilisateur.
withRouterdonne également accès àmatchetlocation. 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.