React Router z opcjonalnym parametrem path
Chcę zadeklarować ścieżkę z opcjonalnym parametrem path, stąd gdy dodam stronę, aby zrobić coś ekstra (np. wypełnić niektóre dane):
Http://localhost/app/path/to/page http://localhost/app/path/to/page/pathParam
W moim routerze reactowym mam następujące ścieżki, aby obsługiwać te dwie opcje (jest to uproszczony przykład):
<Router history={history}>
<Route path="/path" component={IndexPage}>
<Route path="to/page" component={MyPage}/>
<Route path="to/page/:pathParam" component={MyPage}/>
</Route>
</Router>
Mój pytanie brzmi, Czy możemy zadeklarować to w jednej trasie? Jeżeli dodam tylko drugi wiersz, wtedy nie zostanie znaleziona trasa bez parametru.
Edytuj#1:
Rozwiązanie wspomniane tutaj {[7] } o następującej składni nie zadziałało dla mnie, czy jest właściwe? Czy istnieje w dokumentacji?
<Route path="/product/:productName/?:urlID?" handler={SomeHandler} />
Moja wersja Reacta-routera to: 1.0.3
2 answers
Edycja, którą opublikowałeś, była ważna dla starszej wersji react-routera (v0.13) i już nie działa.
React Router v1, v2 i v3
Od wersji 1.0.0
definiujesz opcjonalne parametry za pomocą:
<Route path="to/page(/:pathParam)" component={MyPage} />
I dla wielu opcjonalne parametry:
<Route path="to/page(/:pathParam1)(/:pathParam2)" component={MyPage} />
Używasz nawiasu (
)
aby zawinąć opcjonalne części trasy, w tym ukośnik wiodący (/
). Zobacz też Przewodnik dopasowujący trasę strona oficjalnej dokumentacji.
Uwaga: parametr :paramName
dopasowuje segment URL do następnego /
, ?
, lub #
. Aby dowiedzieć się więcej o ścieżkach i paramach, przeczytaj więcej tutaj .
React Router v4
React Router v4 różni się zasadniczo od v1-V3, a opcjonalne parametry ścieżki nie są wyraźnie zdefiniowane w oficjalna dokumentacja ani jedno, ani drugie.
Zamiast tego, jesteś polecenie zdefiniowania path
parametru, który Path-to-regexp rozumie. Pozwala to na znacznie większą elastyczność w definiowaniu ścieżek, takich jak powtarzające się wzorce, symbole wieloznaczne itp. Aby zdefiniować parametr jako opcjonalny, należy dodać końcowy znak zapytania (?
).
Jako takie, aby zdefiniować opcjonalny parametr, należy:
<Route path="/to/page/:pathParam?" component={MyPage} />
I dla wielu opcjonalne parametry:
<Route path="/to/page/:pathParam1?/:pathParam2?" component={MyPage} />
Uwaga: React Router v4 jest niezgodny z react-Router-relay (Czytaj więcej tutaj ). Zamiast tego użyj wersji v3 lub wcześniejszej (zalecana wersja V2).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-14 03:19:12
Dla wszystkich użytkowników Reactowego routera v4 przybywających tutaj po przeszukiwaniu, opcjonalne parametry w <Route>
są oznaczone przyrostkiem ?
.
Oto Odpowiednia dokumentacja:
Https://reacttraining.com/react-router/web/api/Route/path-string
Path: string
Każda prawidłowa ścieżka URL, którą rozumie Path-to-regexp .
<Route path="/users/:id" component={User}/>
Https://www.npmjs.com/package/path-to-regexp#optional
Opcjonalne
Parametry mogą być zakończone znakiem zapytania (?) aby parametr był opcjonalny. Spowoduje to również, że prefiks będzie opcjonalny.
Prosty przykład stronicowanej sekcji witryny, do której można uzyskać dostęp z numerem strony lub bez niego.
<Route path="/section/:page?" component={Section} />
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-08 10:28:50