প্রতিক্রিয়া সহ বর্তমান পুরো URL টি পড়ুন?


136

আমি কীভাবে একটি রিঅ্যাক্টজেএস উপাদান থেকে পুরো URL পাব?

আমি ভাবছিলাম এটির মতো কিছু হওয়া উচিত this.props.locationতবে তাundefined

উত্তর:


218

window.location.href আপনি যা খুঁজছেন


16
দয়া করে মনে রাখবেন যে এটি সঠিকভাবে কনফিগার না করা থাকলে সার্ভারের দিক থেকে সমস্যা হতে পারে।
শোটা

2
ক্লায়েন্ট সাইডের এমন বৈশিষ্ট্যের জন্য আমার উইন্ডো স্থান প্রয়োজন। সুতরাং আমি সার্ভারের দিকে রেন্ডার করার সময় সমস্যাগুলি এড়াতে আমার সংস্থার অনমাউন্টের রাজ্যে অবস্থান সেট করেছি।
অরবিন্দ শ্রীধরন

এটা কাজ করছে না. বা দয়া করে প্রতিক্রিয়া মধ্যে এর কাঠামো আমাকে সাহায্য করুন। আমি কনস্ট ডিডিডি = উইন্ডো.লোকেশন.href
শুরভীর মরি

1
ওয়েবপ্যাক এই উক্তিটি সম্পর্কে 'উইন্ডো সংজ্ঞায়িত করা হয়নি' সম্পর্কে অভিযোগ করবে
ফ্রাঞ্জ

@ ফ্র্যাঞ্জস হ্যাঁ সার্ভার-সাইড কোডে কোনও "উইন্ডো" নেই, তাই যদি আপনার পরিবেশটি হয় তবে আপনাকে req.originalUrlএক্সপ্রেস বা হোয়াট নোটের মতো কিছু ব্যবহার করতে হবে। এসএসআর সমর্থনযুক্ত বিভিন্ন প্রতিক্রিয়াশীল রাউটিং লাইব্রেরিতে এই তথ্য পাওয়ার জন্য পদ্ধতি রয়েছে।
সম্ভবত

60

আপনার যদি আপনার URL টির পুরো পথ প্রয়োজন হয় তবে আপনি ভ্যানিলা জাভাস্ক্রিপ্ট ব্যবহার করতে পারেন:

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"

উত্স: অবস্থানের নামের সম্পত্তি - ডাব্লু 3 স্কুল

আপনি যদি ইতিমধ্যে "প্রতিক্রিয়া-রাউটার" ব্যবহার না করে থাকেন তবে আপনি এটি ব্যবহার করে এটি ইনস্টল করতে পারেন:

yarn add react-router

তারপরে একটি প্রতিক্রিয়াতে within "রুট" এর মধ্যে থাকা অংশে, আপনি কল করতে পারেন:

this.props.location.pathname

এটি পথটি দেয়, ডোমেন নাম অন্তর্ভুক্ত করে না।

ধন্যবাদ @ আবদুল্লা-জুলকারনাইন!


2
আপনি window.location.pathname
পথের নামের

40

this.props.locationএকটি প্রতিক্রিয়া-রাউটার বৈশিষ্ট্য , আপনি যদি এটি ব্যবহার করতে চান তবে আপনাকে ইনস্টল করতে হবে।

দ্রষ্টব্য: সম্পূর্ণ url ফেরত দেয় না doesn't


8
দ্রষ্টব্য: এটি পূর্ণ url (হোস্টের নাম, প্রোটোকল ইত্যাদি)
ফেরায় না

13

আপনি পাচ্ছেন undefinedকারণ আপনার সম্ভবত প্রতিক্রিয়া রাউটারের বাইরের উপাদান রয়েছে।

মনে রাখবেন যে আপনাকে যে উপাদানটি থেকে কল করছেন this.props.locationএটি কোনও <Route />উপাদানগুলির মধ্যে রয়েছে তা নিশ্চিত করা দরকার :

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

তারপরে ড্যাশবোর্ড উপাদানটির ভিতরে আপনার প্রবেশাধিকার রয়েছে this.props.location...


3
এবং যদি আপনার উপাদানটি কোনওটির অভ্যন্তরে না থাকে তবে <Route />আপনি রাউটার উচ্চতর অর্ডার উপাদান ব্যবহার করতে পারেন ।
আহমদ মালেকী 15'18

3

পেতে বর্তমান রাউটার উদাহরণস্বরূপ বা বর্তমান অবস্থান আপনার সাথে একটি উচ্চ অর্ডার উপাদান তৈরি করতে withRouter থেকে 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)

1

এই পৃষ্ঠায় কেবল আরও ডকুমেন্টেশন যুক্ত করতে - আমি এই সমস্যাটির সাথে কিছুক্ষণ লড়াই করছি।

উপরে যেমন বলা হয়েছে, ইউআরএল পাওয়ার সহজতম উপায় হল window.location.href

এরপরে আমরা ব্যবহার করে ভ্যানিলা জাভাস্ক্রিপ্টের মাধ্যমে ইউআরএল এর কিছু অংশ বের করতে পারি let urlElements = window.location.href.split('/')

আমরা তখন console.log(urlElements)ইউআরএলে .split () কল করে উত্পাদিত উপাদানের অ্যারে দেখতে চাই।

অ্যারেতে আপনি যে সূচকটি অ্যাক্সেস করতে চান তা একবার খুঁজে পেয়েছেন, তারপরে আপনি এটি ভেরিয়েবলের জন্য নির্ধারণ করতে পারেন

let urlElelement = (urlElements[0])

এবং এখন আপনি urlElement এর মানটি ব্যবহার করতে পারেন যা আপনার URL- এর নির্দিষ্ট অংশ হবে, আপনি যেখানেই চান।


0

অন্য কারও হিসাবে উল্লেখ করা হয়েছে, প্রথমে আপনার react-routerপ্যাকেজ দরকার । তবে locationআপত্তি করুন যে এটি আপনাকে পার্সড ইউআরএল সরবরাহ করে।

তবে আপনি যদি বিশ্বব্যাপী ভেরিয়েবলগুলি অ্যাক্সেস না করেই পুরো ইউআরএলটি খারাপভাবে চান তবে আমি বিশ্বাস করি যে এটি করার দ্রুততম উপায়

...

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, এটি প্রায়শই প্রয়োজন ছাড়াই নতুন উপাদান তৈরি এড়াতে সেভাবে কার্যকর করা হয়।

পিএস: অবশ্যই আপনি প্রাচীন ব্রাউজারগুলির দ্বারা সীমাবদ্ধ নয় যা আপনি চেষ্টা করতে চাইতে পারেন new URL()তবে মূলত পুরো পরিস্থিতি কমবেশি অর্থহীন, কারণ আপনি এক বা অন্য উপায়ে বৈশ্বিক চলক অ্যাক্সেস করেন। তার window.location.hrefপরিবর্তে কেন ব্যবহার করবেন না?


-3

আপনি 'ডকুমেন্ট.আরফেরার' দিয়ে পুরো ইউরি / ইউআরএল অ্যাক্সেস করতে পারেন

পরীক্ষা করে দেখুন https://developer.mozilla.org/en-US/docs/Web/API/Document/referrer


এই পৃষ্ঠায় পৌঁছানোর আগে আপনি যেখানে ছিলেন সেখানে রেফারার হ'ল URL। এটি সেটও নাও হতে পারে। যদিও এটি ব্যবহারকারীর গতিবিধিগুলি ট্র্যাক করতে কার্যকর হতে পারে তবে ইউআরএল সন্ধানের সময় আপনি যা চান এটি খুব কমই হয়।
অ্যালেক্সিস উইলক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.