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.history
oumatch
ne sont pas présents par défaut? c'est-à-dire pourquoiwithRouter
devrait être mentionné explicitement?withRouter
est un composant d'ordre supérieur qui transmettra la routematch
, le courantlocation
et leshistory
accessoires les plus proches au composant encapsulé à chaque fois qu'il sera rendu. il connecte simplement le composant au routeur.Tous les composants, en particulier les composants partagés, n'auront pas accès aux accessoires de ce routeur. À l'intérieur de ses composants enveloppés, vous pourrez accéder à
location
prop et obtenir plus d'informations commelocation.pathname
ou rediriger l'utilisateur vers différentes URL en utilisantthis.props.history.push
.Voici un exemple complet de leur page github:
Plus d'informations peuvent être trouvées ici .
la source
withRouter
Le composant d'ordre supérieur vous permet d'accéder auxhistory
propriétés de l' objet et à la correspondance la plus proche<Route>
.withRouter
transmettra les accessoires mis à jourmatch
,location
ethistory
au composant encapsulé à chaque fois qu'il sera rendu.la source
withRouter est un composant d'ordre supérieur qui passera l'itinéraire le plus proche pour accéder à une propriété quant à l'emplacement et à la correspondance à partir des accessoires auxquels il ne peut être accédé que si donnez au composant la propriété située dans le composant
et même la prospérité de correspondance et d'emplacement pour pouvoir changer l'emplacement et utiliser this.props.history.push il doit être fourni pour chaque composant que la propriété doit fournir, mais lorsqu'il est utilisé WithRouter, il peut accéder à l'emplacement et correspondre sans ajouter d'historique de propriété. peut être accédé direction sans ajouter l'historique de propriété pour chaque itinéraire.
la source