Прочитать текущий полный URL-адрес с помощью React?

139

Как мне получить полный URL из компонента ReactJS?

Я думаю, это должно быть что-то вроде, this.props.locationно это такundefined

Doug
источник

Ответы:

222

window.location.href это то, что вы ищете.

probablyup
источник
16
Обратите внимание, что при неправильной настройке могут возникнуть проблемы на стороне сервера.
Шота,
2
Мне нужен window.location для функции на стороне клиента. Поэтому я установил местоположение в состоянии моего компонента onMount, чтобы избежать проблем при рендеринге на стороне сервера.
Арвинд Шридхаран,
это не работает. или помогите мне со структурой этого в React. Я использовал const ddd = window.location.href; console.log (ддд);
Шурвир Мори 08
1
webpack будет жаловаться на это, говоря, что "окно не определено"
Франц См.
@FranzSee да, в коде на стороне сервера нет "окна", поэтому, если это ваша среда, вам нужно будет использовать что-то вроде req.originalUrlexpress или еще чего-то. В различных библиотеках реактивной маршрутизации, которые поддерживают SSR, есть методы для получения этой информации.
наверное,
60

Если вам нужен полный путь к вашему URL-адресу, вы можете использовать ванильный Javascript:

window.location.href

Чтобы получить только путь (без имени домена), вы можете использовать:

window.location.pathname

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

Источник: свойство Location pathname - W3Schools

Если вы еще не используете «response-router», вы можете установить его, используя:

yarn add react-router

затем в React.Component внутри "Route" вы можете вызвать:

this.props.location.pathname

Это возвращает путь, не включая доменное имя.

Спасибо @ abdulla-zulqarnain!

lewdev
источник
2
вы можете сделать то же самое для путиwindow.location.pathname
Абдулла Зулкарнайн
13

Вы получаете, undefinedпотому что у вас, вероятно, есть компоненты за пределами React Router.

Помните, что вам нужно убедиться, что компонент, из которого вы вызываете, this.props.locationнаходится внутри такого <Route />компонента, как этот:

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

Затем внутри компонента Dashboard у вас есть доступ к this.props.location...

Джеймс
источник
3
И если ваш компонент не находится внутри, <Route />вы можете использовать компонент более высокого порядка withRouter .
Ахмад Малеки
3

Чтобы получить текущий экземпляр маршрутизатора или текущее местоположение, вам необходимо создать компонент более высокого порядка с помощью withRouter from react-router-dom. в противном случае, когда вы пытаетесь получить доступ, this.props.locationон вернет undefined

пример

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

class className extends Component {

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

export default withRouter(className)
Алекс Варгезе
источник
2

Просто чтобы добавить немного дополнительной документации на эту страницу - я боролся с этой проблемой некоторое время.

Как сказано выше, самый простой способ получить URL-адрес - через window.location.href.

затем мы можем извлечь части URL-адреса через ванильный Javascript, используя let urlElements = window.location.href.split('/')

Затем мы console.log(urlElements)увидим массив элементов, созданный вызовом .split () для URL-адреса.

После того, как вы нашли, к какому индексу в массиве вы хотите получить доступ, вы можете назначить его переменной

let urlElelement = (urlElements[0])

И теперь вы можете использовать значение urlElement, которое будет конкретной частью вашего URL-адреса, где хотите.

to240
источник
0

Как уже упоминал кто-то другой, сначала вам нужен react-routerпакет. Но locationобъект, который он вам предоставляет, содержит проанализированный URL.

Но если вам очень нужен полный URL-адрес без доступа к глобальным переменным, я считаю, что самым быстрым способом сделать это будет

...

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

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

  ...

href тот, который содержит полный URL.

Как memoizeя обычно использую lodash, это реализовано таким образом, чтобы избежать создания нового элемента без необходимости.

PS: Конечно, если вы не ограничены древними браузерами, вы можете захотеть попробовать new URL()что-то, но в основном вся ситуация более или менее бессмысленна, потому что вы получаете доступ к глобальной переменной тем или иным способом. Так почему бы не использовать window.location.hrefвместо этого?

Юрий Гайовый
источник
-3

Вы можете получить доступ к полному uri / url с помощью 'document.referrer'

Проверьте https://developer.mozilla.org/en-US/docs/Web/API/Document/referrer

Амит Лопес
источник
Реферер - это URL-адрес страницы, на которой вы находились до перехода на эту страницу. Его тоже нельзя установить. Хотя отслеживание перемещений пользователей может быть полезно, при поиске URL-адреса это редко бывает нужно.
Alexis Wilke