React ile mevcut tam URL'yi okudunuz mu?


138

Tam URL'yi bir ReactJS bileşeninden nasıl alabilirim?

Sanırım böyle bir şey olmalı this.props.locationama öyleundefined

Yanıtlar:


221

window.location.href aradığınız şey.


16
Doğru yapılandırılmamışsa, sunucu tarafında sorun yaşayabileceğini lütfen unutmayın.
— Shota

2
İstemci tarafı olan bir özellik için window.location'a ihtiyacım vardı. Bu yüzden, sunucu tarafında işleme yaparken sorun yaşamamak için bileşenimin onMount durumunda konumu ayarlıyorum.
— Arvind Sridharan

çalışmıyor. ya da nazikçe bunun yapısında bana yardım et. Kullandığım const ddd = window.location.href; console.log (ddd);
— Shurvir Mori

1
webpack bu 'pencere tanımlanmadı' sözünden şikayet edecek
— Franz Bkz.

@Franz Evet bakın, sunucu tarafı kodunda "pencere" yoktur, bu nedenle ortamınız buysa req.originalUrlexpress veya whatnot gibi bir şey kullanmanız gerekir . SSR desteğine sahip çeşitli tepki yönlendirme kitaplıklarında bu bilgileri almak için yöntemler bulunur.
— muhtemelen10

60

URL'nizin tam yoluna ihtiyacınız varsa, vanilya Javascript kullanabilirsiniz:

window.location.href

Yalnızca yolu (eksi alan adı) elde etmek için şunları kullanabilirsiniz:

window.location.pathname

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

Kaynak: Konum yol adı Mülk - W3Schools

Zaten "react-router" kullanmıyorsanız, şunu kullanarak kurabilirsiniz:

yarn add react-router

daha sonra bir "Route" içindeki bir React.Component içinde şu çağrıları yapabilirsiniz:

this.props.location.pathname

Bu, alan adını içermeyen yolu döndürür.

Teşekkürler @ abdulla-zulqarnain!


2
yol adı için window.location.pathname
— aynısını yapabilirsiniz


13

undefinedMuhtemelen bileşenlere React Router'ın dışında sahip olduğunuz için alıyorsunuz .

Çağırdığınız bileşenin şunun gibi this.props.locationbir <Route />bileşenin içinde olduğundan emin olmanız gerektiğini unutmayın :

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

Ardından, Gösterge Tablosu bileşeninin içinde şunlara erişebilirsiniz this.props.location...


3
Senin bileşeni içinde değil Ve eğer <Route />kullanabileceğiniz withRouter yüksek mertebeden bileşeni.
— Ahmad Maleki

3

Almak için yönlendirici örneği geçerli veya Geçerli konum size bir Yüksek mertebeden bileşeni oluşturmak zorunda withRouter dan react-router-dom. aksi halde erişmeye çalıştığınızda this.props.locationgeri dönecektir undefined

Misal

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

class className extends Component {

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

export default withRouter(className)

2

Sadece bu sayfaya biraz daha fazla belge eklemek için - Bir süredir bu sorunla uğraşıyorum.

Yukarıda belirtildiği gibi, URL'yi almanın en kolay yolu yoluyladır window.location.href.

daha sonra URL'nin bazı kısımlarını vanilya Javascript ile çıkarabiliriz. let urlElements = window.location.href.split('/')

Daha sonra console.log(urlElements), URL'de .split () çağırarak üretilen öğe Dizisini görürüz.

Dizideki hangi dizine erişmek istediğinizi bulduğunuzda, bunu bir değişkene atayabilirsiniz.

let urlElelement = (urlElements[0])

Ve şimdi URL'nizin belirli bir parçası olacak urlElement değerini istediğiniz yerde kullanabilirsiniz.


0

Başkasının da bahsettiği gibi, önce react-routerpakete ihtiyacınız var . Ancak locationsize sağladığı nesne ayrıştırılmış url içeriyor.

Ancak, global değişkenlere erişmeden tam url'yi kötü bir şekilde istiyorsanız, bunu yapmanın en hızlı yolunun

...

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

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

  ...

href tam bir url içeren olandır.

Çoğunlukla memoizekullanıyorum lodash, bu çoğunlukla zorunluluk olmadan yeni unsurlar yaratmaktan kaçınmak için uygulanıyor.

Not: Elbette eski tarayıcılar tarafından kısıtlanmıyorsunuz, bir new URL()şeyler denemek isteyebilirsiniz , ancak temelde tüm durum aşağı yukarı anlamsız çünkü küresel değişkene şu veya bu şekilde erişiyorsunuz. Öyleyse neden window.location.hrefbunun yerine kullanılmasın?


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.