Jak mogę zdefiniować trasę w pliku tras.jsx w celu przechwycenia __firebase_request_key
wartości parametru z adresu URL wygenerowanego przez proces pojedynczego logowania Twittera po przekierowaniu z ich serwerów?
http://localhost:8000/#/signin?_k=v9ifuf&__firebase_request_key=blablabla
Próbowałem z następującą konfiguracją tras, ale :redirectParam
nie łapie wspomnianego parametru:
<Router>
<Route path="/" component={Main}>
<Route path="signin" component={SignIn}>
<Route path=":redirectParam" component={TwitterSsoButton} />
</Route>
</Route>
</Router>
reactjs
react-router
Franco
źródło
źródło
query strings
„? var1 = val & var2 = val2”,: „url paramters
/ photos /: companyiD / new”Odpowiedzi:
React Router v3
React Router już analizuje lokalizację dla Ciebie i przekazuje ją do RouteComponent jako rekwizyty. Możesz uzyskać dostęp do części zapytania (po? W adresie URL) za pośrednictwem
Jeśli szukasz wartości parametrów ścieżki oddzielonych dwukropkiem (:) wewnątrz routera, są one dostępne poprzez
Dotyczy to późnych wersji React Router v3 (nie jestem pewien, które). Zgłoszono, że używają starszych wersji routerów
this.props.params.redirectParam
.React Router v4 i React Router v5, ogólne
React Router v4 nie analizuje już zapytania, ale można uzyskać do niego dostęp tylko poprzez
this.props.location.search
. Z przyczyn zobacz odpowiedź nbeuchat .Np qs biblioteki importowanego jak
qs
można zrobićInną biblioteką byłby ciąg zapytania . Zobacz tę odpowiedź, aby uzyskać więcej pomysłów na analizowanie ciągu wyszukiwania. Jeśli nie potrzebujesz kompatybilności z IE , możesz także użyć
W przypadku komponentów funkcjonalnych należy zastąpić
this.props.location
hakiem useLocation . Uwaga, możesz użyćwindow.location.search
, ale nie pozwoli to na uruchomienie React renderingu na zmiany. Jeśli twój (niefunkcjonalny) komponent nie jest bezpośrednim dzieckiemSwitch
, musisz użyć go z routerem aby uzyskać dostęp do dowolnego z podanych routerów.Generał
Sugestia nizam.sp
w każdym razie będzie pomocny.
źródło
console.dir()
ze względu na ostrzeżenie ... przynajmniej :)react-router-dom
Musiałem użyć,withRouter
aby to zadziałało!React Router v4
Za pomocą
component
Komponent jest automatycznie renderowany za pomocą rekwizytów trasy.
Za pomocą
render
Rekwizyty trasy są przekazywane do funkcji renderowania.
źródło
query params
bieżącego adresu URL mojej aplikacji w komponencie potomnym za pomocą React Router v4. Jeśli szukaszquery params
, to.props.location.query w React Router 4 został usunięty (obecnie używa wersji 4.1.1). Zobacz tę odpowiedź: stackoverflow.com/a/43630848/1508105/users/?q=...
będziesz musiał, ale możesz/user?q=...
. Powinieneś użyćthis.props.location.search
w React Router v4 i sam przeanalizować wyniki, jak wyjaśniono w mojej odpowiedzi poniżej.this.props.location.search
nie istnieje.React Router v3
Za pomocą React Router v3 możesz uzyskać ciąg zapytania od
this.props.location.search
(? Qs1 = naisarg & qs2 = parmar). Na przykład zlet params = queryString.parse(this.props.location.search)
, dałoby{ qs1 : 'naisarg', qs2 : 'parmar'}
React Router v4
Z React Router v4
this.props.location.query
już nie istnieje. Zamiast tego musisz użyćthis.props.location.search
i przeanalizować parametry zapytania samodzielnie lub przy użyciu istniejącego pakietu, takiego jakquery-string
.Przykład
Oto minimalny przykład użycia React Router v4 i
query-string
biblioteki.Racjonalny
Zespół React Router racjonalnie usuwa tę
query
właściwość:Pełną dyskusję można znaleźć na GitHub .
źródło
O ile mi wiadomo, istnieją trzy metody, aby to zrobić.
1. użyj wyrażenia regularnego, aby uzyskać ciąg zapytania.
2. możesz użyć interfejsu API przeglądarki. obraz aktualny adres URL wygląda następująco:
chcemy tylko dostać 123;
Pierwszy
Następnie
3. użyj trzeciej biblioteki o nazwie „ciąg zapytania”. Najpierw zainstaluj
Następnie zaimportuj go do bieżącego pliku javascript:
Następnym krokiem jest uzyskanie „tokena” w bieżącym adresie URL, wykonaj następujące czynności:
Mam nadzieję, że to pomoże.
Zaktualizowano 25.02.2019
http://www.google.com.au?app=home&act=article&aid=160990
definiujemy funkcję, aby uzyskać parametry:
Możemy uzyskać „pomoc” poprzez:
źródło
React Router v4 nie ma już
props.location.query
obiektu (patrz github dyskusja na ). Tak więc zaakceptowana odpowiedź nie będzie działać w przypadku nowszych projektów.Rozwiązaniem dla v4 jest użycie zewnętrznego łańcucha zapytania biblioteki do parsowania
props.location.search
źródło
{'?foo': 'bar'}
var prefixed = qs.parse('?a=b&c=d', { ignoreQueryPrefix: true });
powinien to naprawić. Przykład znaleziony tutaj: github.com/ljharb/qsPodczas korzystania z haków React nie ma dostępu do dostępu
this.props.location
. Aby przechwycić parametry adresu URL, użyjwindow
obiektu.źródło
React Router v4
Uwaga: obecnie jest w fazie eksperymentalnej.
Sprawdź kompatybilność przeglądarki tutaj: https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/URLSearchParams#Browser_compatibility
źródło
możesz sprawdzić router reagujący , w prosty sposób możesz użyć kodu, aby uzyskać parametr zapytania, o ile zdefiniowano w routerze:
źródło
props.params
jest dla parametrów URL (segment adresu URL z prefiksem „:” w routerze reagującym),props.location.query
przechowuje parametry ciągu zapytania (po „?”) i jest tym, czego chce OP.React Router 5.1+
5.1 wprowadził różne haki, takie jak
useLocation
iuseParams
które mogłyby być użyteczne tutaj.Przykład:
Więc jeśli odwiedzimy powiedz
Możesz to odzyskać jak
źródło
Jeśli twój router jest taki
Otrzymasz taki identyfikator
źródło
Dzięki tej jednowierszowej możesz go używać w dowolnym miejscu zarówno w React Hook, jak i React Class Component z czystym JavaScript.
https://www.hunterisgod.com/?city=Leipzig
źródło
Jeśli nie otrzymujesz
this.props
... oczekiwanych na podstawie innych odpowiedzi, być może będziesz musiał użyćwithRouter
( docs v4 ):źródło
Trudno mi było rozwiązać ten problem. Jeśli żadna z powyższych czynności nie działa, możesz zamiast tego spróbować. Korzystam z aplikacji create-reag-app
Wymagania
reag-router-dom ":" ^ 4.3.1 "
Rozwiązanie
W miejscu, w którym określono router
Dodaj nazwę parametru, który chcesz przekazać w ten sposób
Na stronie, na której renderujesz część / path, możesz to określić, aby wyświetlić identyfikator wywołania nazwy parametru w ten sposób
Na końcu, gdzie eksportujesz domyślne
Pamiętaj, aby dołączyć import
Gdy console.log (this.props) będziesz w stanie, co zostało przekazane. Baw się dobrze!
źródło
RouteComponentProps<{id: number}>
React router
od wersji 4 nie daje jużquery params
bezpośrednio w swoimlocation
obiekcie. Powodem jestPo uwzględnieniu tego, sensowniejsze byłoby po prostu przeanalizowanie lokalizacji. Szukaj w widoku komponentów, które oczekują obiektu zapytania.
Można to zrobić poprzez nadpisanie rodzajowo
withRouter
zreact-router
niczymcustomWithRouter.js
źródło
źródło
Może trochę późno, ale ten haczyk na reakcję może pomóc ci uzyskać / ustawić wartości w zapytaniu URL: https://github.com/rudyhuynh/use-url-search-params (napisane przeze mnie).
Działa z lub bez
react-router
. Poniżej znajduje się przykładowy kod w twoim przypadku:źródło
this.props.params.your_param_name
będzie działać.Jest to sposób na uzyskanie parametrów z ciągu zapytania.
Proszę zrobić,
console.log(this.props);
aby zbadać wszystkie możliwości.źródło
W komponencie, w którym musisz uzyskać dostęp do parametrów, których możesz użyć
this.props.location.state.from.search
który ujawni cały ciąg zapytania (wszystko po
?
znaku)źródło
W React Router v4 tylko zRoute jest prawidłowym sposobem
Możesz uzyskać dostęp do właściwości obiektu historii i najbliższego dopasowania za pomocą komponentu wyższego rzędu withRouter. withRouter przekaże zaktualizowane rekwizyty dopasowania, lokalizacji i historii do opakowanego komponentu za każdym razem, gdy jest renderowany.
https://reacttraining.com/react-router/web/api/withRouter
źródło
Użyłem zewnętrznego pakietu o nazwie ciąg-zapytania do parsowania parametru adresu URL w ten sposób.
źródło
Kiedy pracujesz z reakcją dom trasy, wówczas opróżnisz obiekt w celu dopasowania, ale jeśli wykonasz następujący kod, będzie to działało dla komponentu es6, a także działa bezpośrednio dla komponentu funkcji
W ten sposób możesz uzyskać rekwizyty i dopasować parametry i identyfikator profilu
To zadziałało dla mnie po wielu badaniach dotyczących komponentu es6.
źródło
Powiedz, że jest adres URL w następujący sposób
Jeśli chcemy wyodrębnić kod z tego adresu URL, zadziała poniższa metoda.
źródło
A może coś takiego?
źródło
Możesz utworzyć prosty hak do wyodrębniania parametrów wyszukiwania z bieżącej lokalizacji:
możesz użyć go w swoim funkcjonalnym komponencie w następujący sposób:
źródło
źródło
źródło
najprostsze rozwiązanie!
w routingu:
w reagującym kodzie:
źródło