Odczytać aktualny pełny adres URL za pomocą Reacta?

138

Jak uzyskać pełny adres URL z komponentu ReactJS?

Myślę, że powinno to być coś takiego, this.props.locationale tak jestundefined

Doug
źródło

Odpowiedzi:

221

window.location.href jest tym, czego szukasz.

prawdopodobnie w górę
źródło
16
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ć:

window.location.pathname

console.log(window.location.pathname); //yields: "/js" (where snippets run)
console.log(window.location.href);     //yields: "https://stacksnippets.net/js"

Ź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!

lewdev
źródło
2
możesz zrobić to samo dla window.location.pathname
nazwy
13

Otrzymujesz, undefinedponieważ prawdopodobnie masz komponenty poza React Router.

Pamiętaj, że musisz się upewnić, że komponent, z którego dzwonisz, this.props.locationznajduje 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...

James
źródło
3
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

Przykład

import React, { Component } from 'react';
import { withRouter } from 'react-router-dom';

class className extends Component {

      render(){
           return(
                ....
                  )
              }
}

export default withRouter(className)
Alex Varghese
źródło
2

Ż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

let urlElelement = (urlElements[0])

Teraz możesz użyć wartości urlElement, która będzie określoną częścią adresu URL, gdziekolwiek chcesz.

to240
źródło
0

Jak ktoś inny wspomniał, najpierw potrzebujesz react-routerpakietu. Ale locationobiekt, 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ć

...

const getA = memoize(() => document.createElement('a'));
const getCleanA = () => Object.assign(getA(), { href: '' });

const MyComponent = ({ location }) => {
  const { href } = Object.assign(getCleanA(), location);

  ...

href to ten, który zawiera pełny adres URL.

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?

Yurii Haiovyi
źródło
-3

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

Amit Lopes
źródło
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.
Alexis Wilke