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.