Veuillez noter qu'il peut avoir des problèmes côté serveur s'il n'est pas configuré correctement.
Shota
2
J'avais besoin de window.location pour une fonctionnalité côté client. J'ai donc défini l'emplacement dans l'état de mon composant onMount afin d'éviter les problèmes lors du rendu côté serveur.
Arvind Sridharan
ça ne marche pas. ou veuillez m'aider avec la structure de cela en réaction. J'ai utilisé const ddd = window.location.href; console.log (ddd);
Shurvir Mori
1
webpack se plaindra de cette disant « fenêtre est pas définie »
Franz Voir
@FranzSee oui, il n'y a pas de "fenêtre" dans le code côté serveur, donc si c'est votre environnement, vous devrez utiliser quelque chose comme req.originalUrlfrom express ou autre. Les diverses bibliothèques de routage de réaction prenant en charge SSR ont des méthodes pour obtenir ces informations.
probablementup
60
Si vous avez besoin du chemin complet de votre URL, vous pouvez utiliser du Javascript vanille:
window.location.href
Pour obtenir uniquement le chemin (moins le nom de domaine), vous pouvez utiliser:
Remarque: cela ne renvoie pas l'url complète (nom d'hôte, protocole, etc.)
SgtPooki
13
Vous obtenez undefinedparce que vous avez probablement les composants en dehors de React Router.
N'oubliez pas que vous devez vous assurer que le composant à partir duquel vous appelez se this.props.locationtrouve à l'intérieur d'un <Route />composant tel que celui-ci:
<Route path="/dashboard" component={Dashboard} />
Ensuite, dans le composant Dashboard, vous avez accès à this.props.location...
Et si votre composant n'est pas à l'intérieur d'un, <Route />vous pouvez utiliser un composant d'ordre supérieur withRouter .
Ahmad Maleki
3
Pour obtenir l' instance de routeur actuelle ou l'emplacement actuel, vous devez créer un composant d'ordre supérieur avec withRouter from react-router-dom. sinon, lorsque vous essayez d'y accéder, this.props.locationil retournera undefined
Comme quelqu'un d'autre l'a mentionné, vous avez d'abord besoin d'un react-routerpackage. Mais l' locationobjet qu'il vous fournit contient une URL analysée.
Mais si vous voulez mal une URL complète sans accéder aux variables globales, je pense que le moyen le plus rapide de le faire serait
Pour memoizej'utilise habituellement lodash, il est implémenté de cette façon principalement pour éviter de créer un nouvel élément sans nécessité.
PS: Bien sûr, si vous n'êtes pas limité par les anciens navigateurs, vous voudrez peut-être essayer new URL()quelque chose, mais fondamentalement, toute la situation est plus ou moins inutile, car vous accédez à la variable globale d'une manière ou d'une autre. Alors pourquoi ne pas l'utiliser à la window.location.hrefplace?
Le référent est l'URL de la page sur laquelle vous vous trouviez avant d'atteindre cette page. Il ne peut pas non plus être défini. Bien qu'il puisse être utile de suivre les mouvements des utilisateurs, c'est rarement ce que vous voulez lorsque vous recherchez l'URL.
req.originalUrl
from express ou autre. Les diverses bibliothèques de routage de réaction prenant en charge SSR ont des méthodes pour obtenir ces informations.Si vous avez besoin du chemin complet de votre URL, vous pouvez utiliser du Javascript vanille:
window.location.href
Pour obtenir uniquement le chemin (moins le nom de domaine), vous pouvez utiliser:
window.location.pathname
Source: Propriété du chemin de l'emplacement - W3Schools
Si vous n'utilisez pas déjà "react-router", vous pouvez l'installer en utilisant:
yarn add react-router
puis dans un React.Component dans une "Route", vous pouvez appeler:
this.props.location.pathname
Cela renvoie le chemin, sans inclure le nom de domaine.
Merci @ abdulla-zulqarnain!
la source
window.location.pathname
this.props.location
est une fonctionnalité de react-router , vous devrez l'installer si vous souhaitez l'utiliser.Remarque: ne renvoie pas l'URL complète.
la source
Vous obtenez
undefined
parce que vous avez probablement les composants en dehors de React Router.N'oubliez pas que vous devez vous assurer que le composant à partir duquel vous appelez se
this.props.location
trouve à l'intérieur d'un<Route />
composant tel que celui-ci:<Route path="/dashboard" component={Dashboard} />
Ensuite, dans le composant Dashboard, vous avez accès à
this.props.location
...la source
<Route />
vous pouvez utiliser un composant d'ordre supérieur withRouter .Pour obtenir l' instance de routeur actuelle ou l'emplacement actuel, vous devez créer un composant d'ordre supérieur avec
withRouter
fromreact-router-dom
. sinon, lorsque vous essayez d'y accéder,this.props.location
il retourneraundefined
Exemple
la source
Juste pour ajouter un peu plus de documentation à cette page - je me débat avec ce problème depuis un certain temps.
Comme indiqué ci-dessus, le moyen le plus simple d'obtenir l'URL est via
window.location.href
.nous pouvons ensuite extraire des parties de l'URL via Javascript vanilla en utilisant
let urlElements = window.location.href.split('/')
On verrait alors
console.log(urlElements)
le tableau d'éléments produit en appelant .split () sur l'URL.Une fois que vous avez trouvé l'index du tableau auquel vous souhaitez accéder, vous pouvez ensuite l'affecter à une variable
Et maintenant, vous pouvez utiliser la valeur de urlElement, qui sera la partie spécifique de votre URL, où vous le souhaitez.
la source
Comme quelqu'un d'autre l'a mentionné, vous avez d'abord besoin d'un
react-router
package. Mais l'location
objet qu'il vous fournit contient une URL analysée.Mais si vous voulez mal une URL complète sans accéder aux variables globales, je pense que le moyen le plus rapide de le faire serait
href
est celui contenant une URL complète.Pour
memoize
j'utilise habituellementlodash
, il est implémenté de cette façon principalement pour éviter de créer un nouvel élément sans nécessité.PS: Bien sûr, si vous n'êtes pas limité par les anciens navigateurs, vous voudrez peut-être essayer
new URL()
quelque chose, mais fondamentalement, toute la situation est plus ou moins inutile, car vous accédez à la variable globale d'une manière ou d'une autre. Alors pourquoi ne pas l'utiliser à lawindow.location.href
place?la source
Vous pouvez accéder à l'URI / url complet avec 'document.referrer'
Vérifiez https://developer.mozilla.org/en-US/docs/Web/API/Document/referrer
la source