Leggi l'attuale URL completo con React?


138

Come ottengo l'URL completo da un componente ReactJS?

Penso che dovrebbe essere qualcosa di simile this.props.locationma lo èundefined

Risposte:


221

window.location.href è quello che stai cercando.


16
Si noti che potrebbe avere problemi sul lato server, se non configurato correttamente.
Shota

2
Avevo bisogno di window.location per una funzionalità che è lato client. Quindi ho impostato la posizione nello stato del mio componente onMount per evitare problemi durante il rendering sul lato server.
Arvind Sridharan

non funziona. o gentilmente aiutami con la struttura di ciò in reagire. Ho usato const ddd = window.location.href; console.log (ddd);
Shurvir Mori

1
webpack si lamenterà di questo dicendo che "la finestra non è definita"
Franz See

@FranzSee sì, non c'è una "finestra" nel codice lato server, quindi se questo è il tuo ambiente dovrai usare qualcosa come req.originalUrlda express o altro. Le varie librerie di instradamento di reazione che hanno il supporto SSR hanno metodi per ottenere queste informazioni.
probabilmente il

60

Se hai bisogno del percorso completo del tuo URL, puoi utilizzare Javascript vanilla:

window.location.href

Per ottenere solo il percorso (meno il nome di dominio), puoi utilizzare:

window.location.pathname

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

Origine: proprietà nome percorso posizione - W3Schools

Se non stai già usando "react-router" puoi installarlo usando:

yarn add react-router

quindi in un React.Component all'interno di una "Route", puoi chiamare:

this.props.location.pathname

Ciò restituisce il percorso, escluso il nome di dominio.

Grazie @ abdulla-zulqarnain!


2
puoi fare proprio così per il nome del percorsowindow.location.pathname
Abdulla Zulqarnain


13

Stai ottenendo undefinedperché probabilmente hai i componenti al di fuori di React Router.

Ricorda che devi assicurarti che il componente da cui stai chiamando this.props.locationsia all'interno di un <Route />componente come questo:

<Route path="/dashboard" component={Dashboard} />

Quindi all'interno del componente Dashboard, hai accesso a this.props.location...


3
E se il tuo componente non è all'interno di un <Route />, puoi usarlo con il componente di ordine superiore di Router .
Ahmad Maleki

3

Per ottenere l' istanza del router corrente o la posizione corrente devi creare un componente di ordine superiore con withRouter da react-router-dom. altrimenti, quando si tenta di accedervi this.props.location, tornerà undefined

Esempio

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

class className extends Component {

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

export default withRouter(className)

2

Solo per aggiungere un po 'di ulteriore documentazione a questa pagina, ho lottato con questo problema per un po'.

Come detto sopra, il modo più semplice per ottenere l'URL è tramite window.location.href.

possiamo quindi estrarre parti dell'URL tramite Javascript vanilla utilizzando let urlElements = window.location.href.split('/')

Vorremmo quindi console.log(urlElements)vedere l'array di elementi prodotto chiamando .split () sull'URL.

Dopo aver trovato l'indice dell'array a cui si desidera accedere, è possibile assegnarlo a una variabile

let urlElelement = (urlElements[0])

E ora puoi utilizzare il valore di urlElement, che sarà la parte specifica del tuo URL, ovunque tu voglia.


0

Come ha detto qualcun altro, prima hai bisogno di react-routerpackage. Ma l' locationoggetto che ti fornisce contiene l'URL analizzato.

Ma se vuoi un URL completo senza accedere alle variabili globali, credo che il modo più veloce per farlo sarebbe

...

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

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

  ...

href è quello contenente un URL completo.

Poiché di memoizesolito uso lodash, è implementato in questo modo principalmente per evitare di creare nuovi elementi senza necessità.

PS: Ovviamente non sei limitato dai browser antichi che potresti voler provare new URL(), ma fondamentalmente l'intera situazione è più o meno inutile, perché accedi alle variabili globali in un modo o nell'altro. Allora perché non usarlo window.location.hrefinvece?


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.