Pamiętaj, że może mieć problemy po stronie serwera, jeśli nie zostanie poprawnie skonfigurowany.
Shota
2
Potrzebowałem window.location dla funkcji po stronie klienta. Ustawiłem więc lokalizację w stanie mojego komponentu onMount, aby uniknąć problemów podczas renderowania po stronie serwera.
Arvind Sridharan
to nie działa. lub uprzejmie pomóż mi ze strukturą tego w reakcji. Użyłem const ddd = window.location.href; console.log (ddd);
Shurvir Mori
1
webpack będzie narzekał na to powiedzenie „okno nie jest zdefiniowane”
Franz See
@FranzZobacz tak, nie ma "okna" w kodzie po stronie serwera, więc jeśli to jest twoje środowisko, będziesz musiał użyć czegoś takiego jak req.originalUrlekspres lub coś innego . Różne biblioteki routingu reagowania, które obsługują SSR, mają metody uzyskiwania tych informacji.
prawdopodobnie do
60
Jeśli potrzebujesz pełnej ścieżki adresu URL, możesz użyć zwykłego JavaScript:
window.location.href
Aby uzyskać tylko ścieżkę (bez nazwy domeny), możesz użyć:
A jeśli twojego komponentu nie ma wewnątrz a <Route />, możesz użyć komponentu wyższego rzędu z routerem .
Ahmad Maleki
3
Aby uzyskać bieżącą instancję routera lub bieżącą lokalizację , musisz utworzyć komponent wyższego rzędu z withRouter from react-router-dom. w przeciwnym razie, gdy próbujesz uzyskać dostęp this.props.location, powróci undefined
Ponieważ memoizezwykle używam lodash, jest to realizowane głównie po to, aby uniknąć tworzenia nowego elementu bez konieczności.
PS: Oczywiście nie jesteś ograniczony przez starożytne przeglądarki, które możesz chcieć wypróbować new URL(), ale w zasadzie cała sytuacja jest mniej więcej bezcelowa, ponieważ uzyskujesz dostęp do zmiennej globalnej w taki czy inny sposób. Dlaczego więc nie użyć window.location.hrefzamiast tego?
Strona odsyłająca to adres URL strony, na której byłeś przed wejściem na tę stronę. Nie można go również ustawić. Chociaż śledzenie ruchów użytkowników może być przydatne, rzadko kiedy szukasz tego, czego chcesz.
req.originalUrl
ekspres lub coś innego . Różne biblioteki routingu reagowania, które obsługują SSR, mają metody uzyskiwania tych informacji.Jeśli potrzebujesz pełnej ścieżki adresu URL, możesz użyć zwykłego JavaScript:
window.location.href
Aby uzyskać tylko ścieżkę (bez nazwy domeny), możesz użyć:
window.location.pathname
Źródło: Właściwość nazwy ścieżki lokalizacji - W3Schools
Jeśli jeszcze nie używasz „React-router”, możesz go zainstalować za pomocą:
yarn add react-router
następnie w React.Component w ramach „Route” możesz wywołać:
this.props.location.pathname
Zwraca ścieżkę, bez nazwy domeny.
Dzięki @ abdulla-zulqarnain!
źródło
window.location.pathname
this.props.location
jest funkcją routera reagującego , musisz ją zainstalować, jeśli chcesz z niej korzystać.Uwaga: nie zwraca pełnego adresu URL.
źródło
Otrzymujesz,
undefined
ponieważ prawdopodobnie masz komponenty poza React Router.Pamiętaj, że musisz się upewnić, że komponent, z którego dzwonisz,
this.props.location
znajduje się wewnątrz<Route />
komponentu takiego jak ten:<Route path="/dashboard" component={Dashboard} />
Następnie w komponencie Dashboard masz dostęp do
this.props.location
...źródło
<Route />
, możesz użyć komponentu wyższego rzędu z routerem .Aby uzyskać bieżącą instancję routera lub bieżącą lokalizację , musisz utworzyć komponent wyższego rzędu z
withRouter
fromreact-router-dom
. w przeciwnym razie, gdy próbujesz uzyskać dostępthis.props.location
, powróciundefined
Przykład
źródło
Żeby dodać trochę dalszej dokumentacji do tej strony - od jakiegoś czasu zmagam się z tym problemem.
Jak wspomniano powyżej, najłatwiejszym sposobem uzyskania adresu URL jest skorzystanie z
window.location.href
.możemy następnie wyodrębnić części adresu URL za pomocą zwykłego kodu JavaScript przy użyciu
let urlElements = window.location.href.split('/')
Wtedy
console.log(urlElements)
zobaczylibyśmy tablicę elementów utworzoną przez wywołanie .split () w adresie URL.Po znalezieniu indeksu w tablicy, do którego chcesz uzyskać dostęp, możesz przypisać go do zmiennej
Teraz możesz użyć wartości urlElement, która będzie określoną częścią adresu URL, gdziekolwiek chcesz.
źródło
Jak ktoś inny wspomniał, najpierw potrzebujesz
react-router
pakietu. Alelocation
obiekt, który Ci dostarcza, zawiera przeanalizowany adres URL.Ale jeśli chcesz mieć pełny adres URL bez dostępu do zmiennych globalnych, myślę, że najszybszym sposobem byłoby to zrobić
href
to ten, który zawiera pełny adres URL.Ponieważ
memoize
zwykle używamlodash
, jest to realizowane głównie po to, aby uniknąć tworzenia nowego elementu bez konieczności.PS: Oczywiście nie jesteś ograniczony przez starożytne przeglądarki, które możesz chcieć wypróbować
new URL()
, ale w zasadzie cała sytuacja jest mniej więcej bezcelowa, ponieważ uzyskujesz dostęp do zmiennej globalnej w taki czy inny sposób. Dlaczego więc nie użyćwindow.location.href
zamiast tego?źródło
Możesz uzyskać dostęp do pełnego adresu URL / adresu URL za pomocą „document.referrer”
Sprawdź https://developer.mozilla.org/en-US/docs/Web/API/Document/referrer
źródło