Używam routera React i React dla mojej aplikacji po stronie klienta. Nie mogę dowiedzieć się, jak uzyskać następujące parametry zapytania z adresu URL, takiego jak:
http://xmen.database/search#/?status=APPROVED&page=1&limit=20
Moje trasy wyglądają tak (ścieżka jest całkowicie błędna, wiem):
var routes = (
<Route>
<DefaultRoute handler={SearchDisplay}/>
<Route name="search" path="?status=:status&page=:page&limit=:limit" handler={SearchDisplay}/>
<Route name="xmen" path="candidate/:accountId" handler={XmenDisplay}/>
</Route>
);
Moja trasa działa poprawnie, ale nie jestem pewien, jak sformatować ścieżkę, aby uzyskać żądane parametry. Doceń jakąkolwiek pomoc w tej sprawie!
javascript
reactjs
client-side
react-router
client-side-scripting
Christopher Robin
źródło
źródło
getCurrentQuery
willTransitionTo
haczyków na swoim handlerze. Otrzymuje parametry ciągu zapytania. github.com/rackt/react-router/commit/…Odpowiedzi:
Uwaga: Skopiuj / wklejono z komentarza. Pamiętaj, aby polubić oryginalny post!
Pisząc w es6 i korzystając z reaguj 0.14.6 / react-router 2.0.0-rc5. Używam tego polecenia, aby wyszukać parametry zapytania w moich komponentach:
Tworzy skrót wszystkich dostępnych parametrów zapytania w adresie URL.
Aktualizacja:
W przypadku React-Router v4 zobacz tę odpowiedź . Zasadniczo użyj,
this.props.location.search
aby pobrać ciąg zapytania i przeanalizowaćquery-string
pakiet lub URLSearchParams :źródło
query
wydaje się, że zniknął w React Router 4. github.com/ReactTraining/react-router/issues/…STARE (przed v4):
Pisząc w es6 i korzystając z reaguj 0.14.6 / react-router 2.0.0-rc5. Używam tego polecenia, aby wyszukać parametry zapytania w moich komponentach:
Tworzy skrót wszystkich dostępnych parametrów zapytania w adresie URL.
UPDATE (React Router v4 +):
this.props.location.query w React Router 4 zostało usunięte (obecnie używa v4.1.1) więcej o tym problemie tutaj: https://github.com/ReactTraining/react-router/issues/4410
Wygląda na to, że chcą, abyś użył własnej metody do przeanalizowania parametrów zapytania, obecnie używając tej biblioteki do wypełnienia luki: https://github.com/sindresorhus/query-string
źródło
TypeError: Cannot read property 'location' of undefined
:: |Powyższe odpowiedzi nie będą działać
react-router v4
. Oto, co zrobiłem, aby rozwiązać problem -Najpierw zainstaluj ciąg zapytania, który będzie wymagany do analizy.
npm install -save query-string
Teraz w komponencie routowanym możesz uzyskać dostęp do niepanowanego ciągu zapytania w ten sposób
this.props.location.search
Możesz to sprawdzić, logując się do konsoli.
Na koniec przeanalizuj, aby uzyskać dostęp do parametrów zapytania
Więc jeśli zapytanie jest podobne
?hello=world
console.log(parsed.hello)
będzie logowaćworld
źródło
const query = new URLSearchParams(props.location.search); console.log(query.get('hello'));
(potrzebny jest polyfill dla starszych przeglądarek).aktualizacja 2017.12.25
"react-router-dom": "^4.2.2"
URL jak
BrowserHistory
:http://localhost:3000/demo-7/detail/2?sort=name
HashHistory
:http://localhost:3000/demo-7/#/detail/2?sort=name
z zależnością od ciągu zapytania :
wyniki:
2 {sort: "name"} home
"react-router": "^2.4.1"
Adres URL jak
http://localhost:8080/react-router01/1?name=novaline&age=26
const queryParams = this.props.location.query;
queryParams to obiekt zawierający parametry zapytania:
{name: novaline, age: 26}
źródło
http://localhost:8090/#access_token=PGqsashgJdrZoU6hV8mWAzwlXkJZO8ImDcn&expires_in=7200&token_type=bearer
(tj. Nie/
po#
) Następnie do reagowania routera v4 powinieneś użyćlocation.hash
zamiastlocation.search
Mam nadzieję, że to pomoże :)
Miłego kodowania!
źródło
nie musisz dodawać żadnego dodatkowego modułu tylko w swoim komponencie, który ma taki adres url:
http: // localhost: 3000 / # /? Authority ”
możesz wypróbować następujący prosty kod:
źródło
Po przeczytaniu innych odpowiedzi (najpierw @ duncan-finney, a następnie @Marrs) postanowiłem znaleźć dziennik zmian, który wyjaśnia idiomatyczny sposób rozwiązania tego problemu przez React-router 2.x. Dokumentacji na temat korzystania z lokalizacją (co jest potrzebne do zapytań) w komponentach jest rzeczywiście zaprzecza rzeczywistego kodu. Więc jeśli zastosujesz się do ich rady, otrzymasz duże gniewne ostrzeżenia, takie jak to:
Okazuje się, że nie możesz mieć właściwości kontekstu o nazwie lokalizacja, która używa typu lokalizacji. Możesz jednak użyć właściwości kontekstu o nazwie loc, która używa typu lokalizacji. Tak więc rozwiązaniem jest mała modyfikacja ich źródła w następujący sposób:
Możesz również przekazać tylko te części obiektu lokalizacji, które chcesz, aby Twoje dzieci miały takie same korzyści. Nie zmieniło ostrzeżenia o zmianie typu obiektu. Mam nadzieję, że to pomoże.
źródło
Proste rozwiązanie js:
I możesz zadzwonić z dowolnego miejsca za pomocą:
Mam nadzieję że to pomoże.
źródło
Podczas tworzenia zoptymalizowanej kompilacji produkcyjnej podczas korzystania z modułu ciągu zapytania może wystąpić następujący błąd .
Aby temu zaradzić, uprzejmie użyj alternatywnego modułu o nazwie stringquery, który dobrze wykonuje ten sam proces bez żadnych problemów podczas uruchamiania kompilacji.
źródło