Czy ktoś może wyjaśnić różnicę między
<Route exact path="/" component={Home} />
i
<Route path="/" component={Home} />
Nie znam znaczenia słowa „dokładny”
Czy ktoś może wyjaśnić różnicę między
<Route exact path="/" component={Home} />
i
<Route path="/" component={Home} />
Nie znam znaczenia słowa „dokładny”
Odpowiedzi:
W tym przykładzie nic tak naprawdę. Parametr exact
pojawia się, gdy masz wiele ścieżek o podobnych nazwach:
Na przykład wyobraź sobie, że mamy Users
komponent, który wyświetla listę użytkowników. Mamy też CreateUser
komponent służący do tworzenia użytkowników. Adres URL CreateUsers
powinien być zagnieżdżony w Users
. Więc nasza konfiguracja może wyglądać mniej więcej tak:
<Switch>
<Route path="/users" component={Users} />
<Route path="/users/create" component={CreateUser} />
</Switch>
Teraz problem tutaj, kiedy przejdziemy do http://app.com/users
routera, przejdzie przez wszystkie zdefiniowane przez nas trasy i zwróci PIERWSZE znalezione dopasowanie. W tym przypadku najpierw znajdzie Users
trasę, a następnie ją zwróci. Wszystko dobrze.
Ale gdybyśmy poszli do http://app.com/users/create
, ponownie przeszedłby przez wszystkie nasze zdefiniowane trasy i zwrócił PIERWSZE znalezione dopasowanie. Router React wykonuje częściowe dopasowanie, więc /users
częściowo pasuje /users/create
, więc ponownie niepoprawnie zwróci Users
trasę!
Parametr exact
wyłącza częściowe dopasowanie dla trasy i zapewnia, że zwraca trasę tylko wtedy, gdy ścieżka jest DOKŁADNIE dopasowana do bieżącego adresu URL.
Więc w tym przypadku powinniśmy dodać exact
do naszej Users
trasy, aby pasowała tylko na /users
:
<Switch>
<Route exact path="/users" component={Users} />
<Route path="/users/create" component={CreateUser} />
</Switch>
Dokumenty exact
szczegółowo wyjaśniają i podają inne przykłady.
exact
powinno być moim zdaniem domyślne
/admin//users
w komponencie Admin i /admin/users/create
komponencie Root ??? Obecnie mam taką sytuację i typowe exact
rozwiązanie nie działa poprawnie.
Krótko mówiąc, jeśli masz wiele tras zdefiniowanych dla routingu aplikacji, otoczonych Switch
takim komponentem;
<Switch>
<Route exact path="/" component={Home} />
<Route path="/detail" component={Detail} />
<Route exact path="/functions" component={Functions} />
<Route path="/functions/:functionName" component={FunctionDetails} />
</Switch>
Następnie musisz umieścić exact
słowo kluczowe w Trasie, której ścieżka jest również zawarta w innej ścieżce. Na przykład ścieżka główna /
jest zawarta we wszystkich ścieżkach, więc musi mieć exact
słowo kluczowe, aby odróżnić ją od innych ścieżek, które zaczynają się od /
. Powód jest również podobny do /functions
ścieżki. Jeśli chcesz użyć innej ścieżki, takiej jak /functions-detail
lub /functions/open-door
która /functions
w niej zawiera , musisz użyć exact
dla /functions
trasy.
Spójrz tutaj: https://reacttraining.com/react-router/core/api/Route/exact-bool
ścisłe: bool
Gdy prawda, będzie pasować tylko wtedy, gdy ścieżka location.pathname
dokładnie pasuje do .
**path** **location.pathname** **exact** **matches?**
/one /one/two true no
/one /one/two false yes
Najkrótsza odpowiedź brzmi
Spróbuj tego.
<switch>
<Route exact path="/" component={Home} />
<Route path="/about" component={About} />
<Route path="/shop" component={Shop} />
</switch>
exact
atrybutu / właściwości, a zatem z pewnością nie jest „odpowiedzią”. Powinieneś raczej spróbować odpowiedzieć na pytanie, które jest faktycznie zadawane, zamiast dawać rozwiązanie problemu, którego nie jesteś pewien, czy OP faktycznie ma.