Quelqu'un peut expliquer la différence entre
<Route exact path="/" component={Home} />
et
<Route path="/" component={Home} />
Je ne connais pas la signification de 'exact'
Dans cet exemple, rien de vraiment. Le paramètre exact
entre en jeu lorsque vous avez plusieurs chemins portant des noms similaires:
Par exemple, imaginons que nous ayons un composant Users
qui affiche une liste d'utilisateurs. Nous avons également un composant CreateUser
qui est utilisé pour créer des utilisateurs. L'URL pour CreateUsers
doit être imbriqué sous Users
. Donc, notre configuration pourrait ressembler à quelque chose comme ça:
<Route path="/users" component={Users} />
<Route path="/users/create" component={CreateUser} />
Maintenant le problème ici, quand nous allons à http://app.com/users
, le routeur va parcourir toutes nos routes définies et renvoyer la correspondance FIRST trouvée. Donc, dans ce cas, il trouverait la route Users
en premier et le renverrait ensuite. Tout bon.
Mais si nous allions dans http://app.com/users/create
, il passerait à nouveau par tous les itinéraires définis et renverrait le match FIRST trouvé. Le routeur de réaction fait une correspondance partielle, donc /users
correspond partiellement à /users/create
, de sorte qu'il renverrait à nouveau incorrectement la route Users
!
Le paramètre exact
désactive la correspondance partielle pour une route et s'assure qu'il ne renvoie la route que si le chemin est une correspondance EXACT avec l'URL actuelle.
Donc, dans ce cas, nous devrions ajouter exact
à notre route Users
pour qu'il ne corresponde que sur /users
:
<Route exact path="/users" component={Users} />
<Route path="/users/create" component={CreateUser} />
La documentation explique exact
en détail et donne d'autres exemples.
En bref, si vous avez plusieurs itinéraires définis pour le routage de votre application, inclus avec le composant Switch
comme ceci;
<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 mot clé exact
dans la Route dont le chemin est également inclus dans le chemin d’une autre Route. Par exemple, le chemin principal /
est inclus dans tous les chemins. Il doit donc comporter le mot clé exact
pour le différencier des autres chemins commençant par /
. La raison est également similaire à /functions
path. Si vous souhaitez utiliser un autre chemin, tel que /functions-detail
ou /functions/open-door
, qui contient /functions
, vous devez utiliser exact
pour la route /functions
.