Quelqu'un peut-il expliquer la différence entre
<Route exact path="/" component={Home} />
et
<Route path="/" component={Home} />
Je ne connais pas le sens de 'exact'
Quelqu'un peut-il expliquer la différence entre
<Route exact path="/" component={Home} />
et
<Route path="/" component={Home} />
Je ne connais pas le sens de 'exact'
Réponses:
Dans cet exemple, rien de vraiment. Le exact
paramètre entre en jeu lorsque vous avez plusieurs chemins qui ont des noms similaires:
Par exemple, imaginons que nous ayons un Users
composant qui affiche une liste d'utilisateurs. Nous avons également un CreateUser
composant utilisé pour créer des utilisateurs. L'URL de CreateUsers
doit être imbriquée sous Users
. Notre configuration pourrait donc ressembler à ceci:
<Switch>
<Route path="/users" component={Users} />
<Route path="/users/create" component={CreateUser} />
</Switch>
Maintenant, le problème ici, lorsque nous allons au http://app.com/users
routeur, passera par toutes nos routes définies et retournera la PREMIÈRE correspondance qu'il trouve. Donc, dans ce cas, il trouverait d'abord l' Users
itinéraire, puis le renverrait. Tout bon.
Mais, si nous y allions http://app.com/users/create
, il passerait à nouveau par toutes nos routes définies et retournerait la PREMIÈRE correspondance qu'il trouve. Le routeur React effectue une correspondance partielle, donc une correspondance /users
partielle /users/create
, de sorte qu'il renvoie Users
à nouveau incorrectement la route!
Le exact
paramètre désactive la correspondance partielle pour une route et s'assure qu'elle ne renvoie la route que si le chemin correspond exactement à l'URL actuelle.
Donc, dans ce cas, nous devrions ajouter exact
à notre Users
route pour qu'elle ne corresponde que sur /users
:
<Switch>
<Route exact path="/users" component={Users} />
<Route path="/users/create" component={CreateUser} />
</Switch>
Les documents expliquent exact
en détail et donnent d'autres exemples.
exact
devrait être la valeur par défaut à mon avis
/admin//users
dans le composant Admin, et /admin/users/create
dans le composant Root ??? Je suis actuellement dans cette situation et la exact
solution typique ne fonctionne pas correctement.
En bref, si vous avez plusieurs itinéraires définis pour le routage de votre application, inclus avec un Switch
composant comme celui-ci;
<Switch>
<Route exact path="/" component={Home} />
<Route path="/detail" component={Detail} />
<Route exact path="/functions" component={Functions} />
<Route path="/functions/:functionName" component={FunctionDetails} />
</Switch>
Ensuite, vous devez mettre le exact
mot-clé de la Route dont le chemin est également inclus par le chemin d'une autre Route. Par exemple, le chemin d'accueil /
est inclus dans tous les chemins, il doit donc avoir un exact
mot - clé pour le différencier des autres chemins commençant par /
. La raison est également similaire au /functions
chemin. Si vous souhaitez utiliser un autre chemin de route comme /functions-detail
ou /functions/open-door
qui comprend, /functions
vous devez l'utiliser exact
pour la /functions
route.
Jetez un œil ici: https://reacttraining.com/react-router/core/api/Route/exact-bool
exact: booléen
Lorsque true, ne correspondra que si le chemin correspond location.pathname
exactement au.
**path** **location.pathname** **exact** **matches?**
/one /one/two true no
/one /one/two false yes
La réponse la plus courte est
Veuillez essayer ceci.
<switch>
<Route exact path="/" component={Home} />
<Route path="/about" component={About} />
<Route path="/shop" component={Shop} />
</switch>
exact
attribut / accessoire, et n'est donc certainement pas une "réponse". Vous devriez essayer de répondre à la question qui vous est réellement posée plutôt que de donner une solution à un problème dont vous n'êtes pas sûr qu'OP ait réellement.