Risposte:
window.location.href
è quello che stai cercando.
req.originalUrl
da express o altro. Le varie librerie di instradamento di reazione che hanno il supporto SSR hanno metodi per ottenere queste informazioni.
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!
window.location.pathname
this.props.location
è una funzionalità di React-Router , che dovrai installare se vuoi usarla.
Nota: non restituisce l'URL completo.
Stai ottenendo undefined
perché probabilmente hai i componenti al di fuori di React Router.
Ricorda che devi assicurarti che il componente da cui stai chiamando this.props.location
sia 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
...
<Route />
, puoi usarlo con il componente di ordine superiore di Router .
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)
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.
Come ha detto qualcun altro, prima hai bisogno di react-router
package. Ma l' location
oggetto 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 memoize
solito 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.href
invece?
Puoi accedere a uri / url completo con 'document.referrer'
Controlla https://developer.mozilla.org/en-US/docs/Web/API/Document/referrer