প্রতিক্রিয়া-রাউটার বাহ্যিক লিঙ্ক


124

যেহেতু আমি প্রতিক্রিয়া অ্যাপটিতে আমার রুটগুলি পরিচালনা করতে প্রতিক্রিয়া-রাউটার ব্যবহার করছি, তাই বাহ্যিক উত্সে পুনর্নির্দেশের কোনও উপায় থাকলে আমি আগ্রহী।

বলুন কেউ আঘাত করেছে:

example.com/privacy-policy

আমি এটিতে পুনর্নির্দেশ করতে চাই:

example.zendesk.com/hc/en-us/articles/123456789-Privacy-Policies

আমি আমার সূচক html এ প্লেইন জেএস-এ এটি লেখার বিষয়টি এড়াতে ঠিক শূন্যের সাহায্য পাচ্ছি যেমন:

if ( window.location.path === "privacy-policy" ){
  window.location = "example.zendesk.com/hc/en-us/articles/123456789-Privacy-Policies"
}

আপনি কোন প্রতিক্রিয়া রাউটার ব্যবহার করছেন?
টাইলার ম্যাকগিনিস

আমি সংস্করণ 3.x ব্যবহার করছি
এরিক হোডনস্কি

4
window.location.hrefএকটি আনুষ্ঠানিক পুনর্নির্দেশের জন্য কেবল পরিবর্তন করুন ।
আমিরহোসেইন মেহেরভরজি

4
@ আমিরহোসেইন মেহরওয়ার্জী যা আসলে কিছুই বোঝায় না। আপনি আরও নির্দিষ্ট বা উদাহরণ দিতে পারেন? এছাড়াও আপনি নিশ্চিত হয়েছি কিনা তা সম্পর্কে আমি নিশ্চিত নই তবে এই প্রশ্নের ইতিমধ্যে প্রতিক্রিয়া ও প্রতিক্রিয়া রাউটারের সাথে সম্পর্কিত একটি গ্রহণযোগ্য উত্তর রয়েছে যা প্রশ্নটিই ছিল।
এরিক হোডনস্কি

4
@ রিলেক আপনার যদি শর্তে আপনার ইউআরএল হিসাবে এটি ব্যবহার করা প্রয়োজন। কিছু দিন আগে আমারও একই সমস্যা হয়েছিল এবং এই উপায়টি সহজ এবং কার্যকর বলে মনে হয়েছে। এটি অবিলম্বে পুনর্নির্দেশ করে। গৃহীত উত্তর হ'ল একটি রাউটিং সমাধান (যদিও এটি রুট নীতিগুলি লঙ্ঘন করে, বিবেচনা করে যে রুট আর্কিটেকচারটি বাইরের জন্য নয় অ্যাপের অভ্যন্তরে নেভিগেশনের জন্য) যা আমার মতো পরিবেশের জন্য কাজ করে না
আমিরহোসেইন মেহরবাজি

উত্তর:


180

বাহ্যিক লিঙ্কে পুনঃনির্দেশ করতে প্রতিক্রিয়া রাউটার ব্যবহার করার জন্য এখানে একটি ওয়ান-লাইনার রয়েছে:

<Route path='/privacy-policy' component={() => { 
     window.location.href = 'https://example.com/1234'; 
     return null;
}}/>

এটি উপাদানটির কোডটিকে একক ফাংশনে হ্রাস করতে শুদ্ধ উপাদান ধারণাটি ব্যবহার করে যা কোনও কিছু রেন্ডারিংয়ের পরিবর্তে ব্রাউজারটিকে একটি বাহ্যিক URL এ পুনঃনির্দেশ করে।

প্রতিক্রিয়া রাউটার 3 এবং 4 এ উভয়ই কাজ করে।


4
এটি কাজ করে তবে আমি আরও মার্জিত স্কেলেবল সমাধানের সন্ধান করছিলাম। মোবাইল অ্যাপস ইত্যাদির জন্য পুনঃনির্দেশগুলি (রিএ্যাক্টনাটিভ নয়, সত্যিকারের নেটিভ অ্যাপ্লিকেশনগুলি) দিয়ে আমাকে আরও কীভাবে এগিয়ে যাওয়ার অনুমতি দেয় সেদিকে আমি কী নিয়ে এসেছি তা দেখুন। এখন আমি যা করছি তা আমার সমস্যা সমাধানের সঠিক উপায় নয়, তবে এই সমস্যাটি সমাধান করার জন্য আমি আপনাকে আমার সমাধানটি তদন্ত করার পরামর্শ দিচ্ছি যদি ভিন্ন দৃষ্টিকোণ ছাড়া আর কিছুই না হয়।
এরিক হোডনস্কি

4
এটি আমার মনে আসলে পরিষ্কার নয়। আমি বরং একটি সতর্কতার সাথে অ্যাঙ্কর ট্যাগ ব্যবহার করব। দ্বিতীয়ত, রুট যে তারপর ফিরে পুননির্দেশনা ব্রাউজার আয় আপনার উপর ব্যাক বোতাম আঘাত example.zendesk.com/hc/en-us/articles/...
জনাথন Rys

12
ভাল ব্যাক আচরণের জন্য (আপনার অ্যাপ্লিকেশনটির জন্য যাচাই করুন), উইন্ডো.লোকেশন.রেপ্লেস (' উদাহরণ.
com

4
উত্তরের কোনওটিই করেনি, মূল পোস্টটি কেবল ক্লায়েন্টের পুনঃনির্দেশগুলি সম্পর্কেই জিজ্ঞাসা করছিল, যখন সচেতন থাকুক যে কোনও 301 বা 302 টাইপের সত্যিকারের পুনঃনির্দেশ সমর্থন নেই।
এরিক হোডনস্কি

53

<Link />প্রতিক্রিয়া-রাউটার থেকে উপাদান ব্যবহার করার দরকার নেই ।

আপনি যদি বাহ্যিক লিঙ্কে যেতে চান তবে অ্যাঙ্কর ট্যাগ ব্যবহার করুন।

<a target="_blank" href="https://meetflo.zendesk.com/hc/en-us/articles/230425728-Privacy-Policies">Policies</a>


15
সম্পর্কিত এবং বিভ্রান্তিমূলক উত্তর।
প্রিয়া রঞ্জন সিং

4
আপনি যদি এটি ব্যবহার করেন rel="noopener noreferrer"তবে<a>
এস ..

7
উত্তম উত্তর, যতক্ষণ না তারা এটি কাজ করবে ততক্ষণ তার যত্ন নেবে না।
ফ্রাঙ্কবাইট.কম

42

আমি আসলে আমার নিজের উপাদান তৈরি করে শেষ করেছি। <Redirect> এটি react-routerউপাদান থেকে তথ্য নেয় তাই আমি এটিকে আমার রুটে রাখতে পারি। যেমন:

<Route
  path="/privacy-policy"
  component={ Redirect }
  loc="https://meetflo.zendesk.com/hc/en-us/articles/230425728-Privacy-Policies"
  />

এখানে আমার উপাদানটি হ'ল - যে কেউ আগ্রহী:

import React, { Component } from "react";

export class Redirect extends Component {
  constructor( props ){
    super();
    this.state = { ...props };
  }
  componentWillMount(){
    window.location = this.state.route.loc;
  }
  render(){
    return (<section>Redirecting...</section>);
  }
}

export default Redirect;

সম্পাদনা - দ্রষ্টব্য: এটি সহ react-router: 3.0.5, এটি 4.x এ এত সহজ নয়


আপনার কিছু করার দরকার নেই, প্রতিক্রিয়া হ'ল একটি কাঠামো এবং ফ্রেমওয়ার্কে অনেক মূল্য রয়েছে। প্রতিক্রিয়া কাঠামোর মধ্যে এটি কীভাবে করা যায় তা এই। এটি ব্রাউজারের ইতিহাসের মডিউলটিকে বিবেচনায় নেবে না যা এখানে আরও মোড়ানো হতে পারে, এটি আরও কার্যকর করে তোলে। এছাড়াও দয়া করে মনে রাখবেন যে "উইন্ডো.লোকেশন" এটি কীভাবে 1999 সালে করা হয়েছিল client এটি ক্লায়েন্ট সাইড রাউটিংয়ের জন্য আপনার রুট টেবিলের সাথে যুক্ত করার এক উপায়। এটি কোনও "ভাল" সমাধান নয়।
এরিক হোডনস্কি

রিঅ্যাক্ট -আউটার ভি 4-তে আপনি এর পরিবর্তে উপাদান রেন্ডার ব্যবহার করতে পারেন
ইর্রেচ

4
@ ইরেক "পরিবর্তে উপাদান সরবরাহ করুন" এর অর্থ কিছুই নেই। যদি আপনার প্রশ্নের উত্তর থাকে তবে দয়া করে এটি যুক্ত করুন এবং আপনি কীভাবে বাস্তবায়ন করবেন সে সম্পর্কে কিছু বিশদ দিন।
এরিক হোডনস্কি

4
@ মুহাম্মাদ উমর বা আপনি কেবল একটি অ্যাঙ্কর ট্যাগ ব্যবহার করুন। প্রতিক্রিয়া-রাউটারটি কেবলমাত্র আপনার প্রয়োগের মধ্যেই রাউটিংয়ের জন্য বেশ কঠোরভাবে বোঝানো হয়েছে। আপনি এই নকশার সিদ্ধান্তের সাথে একমত হতে পারেন (আমি জানি আমি এটি করি) তবে এটি "1999 সালে আরও ভাল করা হয়নি", এটি ঠিক একইভাবে করা হয়েছে।
worc

আমরা যদি বাহ্যিক সাইটে পুনঃনির্দেশের সময় এইচটিটিপি স্থিতি কোডের সাথে ইউআরএলকেও গতিশীলভাবে পাস করতে চাই তবে কী হয়। আমি কিছু উদাহরণ পেয়েছি, তবে এটি আমার প্রয়োজনীয়তার সাথে পরিষ্কার নয় gist.github.com/arasmussen/f2c01dc858481590f6bffae6b540632c
কৃষ্ণ মণি

26

এটির প্রতিক্রিয়া রাউটারের অনুরোধ করার দরকার নেই। এই ক্রিয়াটি স্থানীয়ভাবে করা যেতে পারে এবং এটি ব্রাউজার দ্বারা সরবরাহ করা হয়।

শুধু ব্যবহার window.location

class RedirectPage extends React.Component {
  componentDidMount(){
    window.location.replace('https://www.google.com')
  }
}

এছাড়াও, আপনি যদি এটি একটি নতুন ট্যাবে খুলতে চান:

window.open('https://www.google.com', '_blank');

4
এই উত্তরটি অসম্পূর্ণ, বিমূর্ত করার অনুমতি দেয় না বা এটি রাউটারের সাথে সম্পর্কিত
এরিক হোডনস্কি

9
এই লক্ষ্য। এটি প্রতিক্রিয়া রাউটার অনুরোধ করার প্রয়োজন নেই। এই ক্রিয়াটি স্থানীয়ভাবে করা যেতে পারে এবং এটি ব্রাউজার দ্বারা সরবরাহ করা হয়।
অ্যালান

আমরা যদি বাহ্যিক সাইটে পুনঃনির্দেশের সময় এইচটিটিপি স্থিতি কোডের সাথে ইউআরএলকেও গতিশীলভাবে পাস করতে চাই তবে কী হয়। আমি কিছু উদাহরণ পেয়েছি, তবে এটি আমার প্রয়োজনের সাথে পরিষ্কার নয়। gist.github.com/arasmussen/f2c01dc858481590f6bffae6b540632c
কৃষ্ণ মণি

24

প্রতিক্রিয়া-রাউটারের লিঙ্ক উপাদান সহ আপনি এটি করতে পারেন। " টু " প্রপসে আপনি 3 ধরণের ডেটা নির্দিষ্ট করতে পারবেন:

  • একটি স্ট্রিং : লিংকের অবস্থানের একটি স্ট্রিং প্রতিনিধিত্ব, অবস্থানের পথের নাম, অনুসন্ধান এবং হ্যাশ বৈশিষ্ট্যগুলিকে একত্রে তৈরি করে।
  • একটি অবজেক্ট : এমন একটি বস্তু যার মধ্যে নিম্নলিখিত বৈশিষ্ট্যগুলি থাকতে পারে:
    • পথের নাম : একটি স্ট্রিং যা লিঙ্কের পথে প্রতিনিধিত্ব করে।
    • অনুসন্ধান : ক্যোয়ারী প্যারামিটারগুলির একটি স্ট্রিং প্রতিনিধিত্ব।
    • হ্যাশ : ইউআরএল রাখতে একটি হ্যাশ, যেমন # এ-হ্যাশ।
    • অবস্থা : অবস্থান স্থির রাখতে ।
  • একটি ফাংশন : এমন একটি ফাংশন যাতে বর্তমান অবস্থানটি একটি আর্গুমেন্ট হিসাবে পাস করা হয় এবং যা কোনও স্ট্রিং বা অবজেক্ট হিসাবে অবস্থানের প্রতিনিধিত্ব করে return

আপনার উদাহরণের জন্য (বাহ্যিক লিঙ্ক):

https://example.zendesk.com/hc/en-us/articles/123456789- গোপনীয়তা- নীতিগুলি

আপনি নিম্নলিখিতটি করতে পারেন:

<Link to={{ pathname: "https://example.zendesk.com/hc/en-us/articles/123456789-Privacy-Policies" }} target="_blank" />

আপনি যেমন হতে চান এমন প্রপসগুলিও পাস করতে পারেন যেমন শিরোনাম, আইডি, ক্লাসনেম ইত্যাদি on


6

এখানে কিছু তথ্য ব্যবহার করে, আমি নিম্নলিখিত উপাদানটি নিয়ে এসেছি যা আপনি আপনার রুট ঘোষণার মধ্যে ব্যবহার করতে পারেন। এটি প্রতিক্রিয়া রাউটার ভি 4 এর সাথে সামঞ্জস্যপূর্ণ।

এটি টাইপ স্ক্রিপ্ট ব্যবহার করছে, তবে দেশীয় জাভাস্ক্রিপ্টে রূপান্তর করতে মোটামুটি সোজা-ফরোয়ার্ড হওয়া উচিত:

interface Props {
  exact?: boolean;
  link: string;
  path: string;
  sensitive?: boolean;
  strict?: boolean;
}

const ExternalRedirect: React.FC<Props> = (props: Props) => {
  const { link, ...routeProps } = props;

  return (
    <Route
      {...routeProps}
      render={() => {
        window.location.replace(props.link);
        return null;
      }}
    />
  );
};

এবং এর সাথে ব্যবহার করুন:

<ExternalRedirect
  exact={true}
  path={'/privacy-policy'}
  link={'https://example.zendesk.com/hc/en-us/articles/123456789-Privacy-Policies'}
/>


1

আমি মনে করি না প্রতিক্রিয়া-রাউটার এই সমর্থন সরবরাহ করে। ডকুমেন্টেশন উল্লেখ

একটি <পুনর্নির্দেশ> পুরানো ইউআরএল বজায় রাখতে আপনার অ্যাপ্লিকেশনটিতে অন্য একটি রুটে পুনর্নির্দেশ সেট আপ করে ।

আপনি এর পরিবর্তে প্রতিক্রিয়া-পুনর্নির্দেশের মতো কিছু ব্যবহার করার চেষ্টা করতে পারেন


প্রতিক্রিয়া-পুনর্নির্দেশটি
হ্রাস

1

অ্যালানের উত্তরে প্রসারিত করতে আপনি এমন একটি তৈরি করতে পারেন <Route/>যা সমস্তকে পুনর্নির্দেশ করে<Link/> 'বাহ্যিক উত্সকে' HTTP: 'বা' https: 'যুক্ত বৈশিষ্ট্যগুলির সাথে "এর" সাথে করে।

নীচে এটির একটি কার্যকারী উদাহরণ যা সরাসরি আপনার মধ্যে স্থাপন করা যেতে পারে <Router>

<Route path={['/http:', '/https:']} component={props => {
  window.location.replace(props.location.pathname.substr(1)) // substr(1) removes the preceding '/'
  return null
}}/>

0

ভি 3 এর জন্য, যদিও এটি ভি 4 এর জন্য কাজ করতে পারে। এরিকের উত্তর থেকে দূরে গিয়ে, আমাকে আরও কিছু করা দরকার যেমন স্থানীয় বিকাশ হ্যান্ডল করার মতো যেখানে url এ 'HTTP' উপস্থিত নেই। আমি একই সার্ভারে অন্য অ্যাপ্লিকেশনটিতেও পুনঃনির্দেশ করছি।

রাউটার ফাইলে যুক্ত হয়েছে:

import RedirectOnServer from './components/RedirectOnServer';

       <Route path="/somelocalpath"
          component={RedirectOnServer}
          target="/someexternaltargetstring like cnn.com"
        />

এবং উপাদান:

import React, { Component } from "react";

export class RedirectOnServer extends Component {

  constructor(props) {
    super();
    //if the prefix is http or https, we add nothing
    let prefix = window.location.host.startsWith("http") ? "" : "http://";
    //using host here, as I'm redirecting to another location on the same host
    this.target = prefix + window.location.host + props.route.target;
  }
  componentDidMount() {
    window.location.replace(this.target);
  }
  render(){
    return (
      <div>
        <br />
        <span>Redirecting to {this.target}</span>
      </div>
    );
  }
}

export default RedirectOnServer;

-1

টাইপস্ক্রিপ্ট সহ প্রতিক্রিয়া ব্যবহার করে আপনি একটি ত্রুটি পান কারণ ফাংশনটি অবশ্যই একটি প্রতিক্রিয়া উপাদান ফেরত দেয়, না void। সুতরাং আমি এটি রুট রেন্ডার পদ্ধতিটি ব্যবহার করে করেছি (এবং প্রতিক্রিয়া রাউটার ভি 4 ব্যবহার করে):

redirectToHomePage = (): null => {
    window.location.reload();
    return null;
  };    
<Route exact path={'/'} render={this.redirectToHomePage} />

যেখানে আপনি পরিবর্তে এছাড়াও ব্যবহার করতে পারেন window.location.assign(), window.location.replace()ইত্যাদি


-2

আপনি যদি সার্ভার সাইড রেন্ডিং ব্যবহার করেন তবে আপনি ব্যবহার করতে পারেন StaticRouter। আপনার contextহিসাবে propsএবং তারপরে <Redirect path="/somewhere" />আপনার অ্যাপ্লিকেশনে উপাদান যুক্ত করার সাথে । প্রতিটি সময়ে প্রতিক্রিয়া-রাউটারটি একটি পুনর্নির্দেশ উপাদানটির সাথে মেলে এটি ধারণাটি স্ট্যাটিক রাউটারে আপনি যে প্রসঙ্গে চলেছেন তাতে কিছু যুক্ত হবে যাতে আপনাকে জানাতে পারে যে আপনার পথটি একটি পুনঃনির্দেশ উপাদানটির সাথে মেলে। এখন যেহেতু আপনি জানেন যে আপনি একটি পুনর্নির্দেশকে আঘাত করেছেন আপনার কেবল যাচাই করা উচিত যে আপনার পুনর্নির্দেশের সন্ধান করছেন ts তারপরে সার্ভারের মাধ্যমে কেবল পুনর্নির্দেশ করুন। ctx.redirect('https://example/com')


আমি ক্লায়েন্টে এটি করার জন্য একটি উপায় জিজ্ঞাসা করছি। এটি সঠিকভাবে ডিএনএস পর্যায়ে করা উচিত। দ্বিতীয়টি প্রাথমিক সার্ভারের অনুরোধে থাকবে। যেহেতু আমি এস 3 এ হোস্টিং করছি তাই সার্ভার-সাইড নেই। সুতরাং আমাদের ডেপ-আপ্স লোকটি পরিষেবা স্তরে পুনর্নির্দেশ করতে না পারলে আমি এখনই আটকে আছি।
এরিক হোডনস্কি

আপনি যা করতে পারেন তা হ'ল<Redirect push={ true } to="/pathtoredirect" />
রেই ডায়ান

-4

নিম্নলিখিতগুলি ব্যবহার করে আমি প্রতিক্রিয়া-রাউটার-ডোমে একটি পুনর্নির্দেশ অর্জন করতে সক্ষম হয়েছি

<Route exact path="/" component={() => <Redirect to={{ pathname: '/YourRoute' }} />} />

আমার ক্ষেত্রে, আমি যখনই ব্যবহারকারীদের http://myapp.comঅ্যাপ্লিকেশনটির মধ্যে অন্য কোনও জায়গায় রুট ইউআরএল পরিদর্শন করি তখন আমি পুনঃনির্দেশের একটি উপায় খুঁজছিলাম http://myapp.com/newplace। সুতরাং উপরের সাহায্য করেছে।


4
ওপি স্পষ্টভাবে জানিয়েছে যে তিনি একই অ্যাপ্লিকেশনটির কোনও রুটে নয়, বাহ্যিক সংস্থায় পুনর্নির্দেশের চেষ্টা করছেন।
Neets

স্পষ্টতই, আমি আমার ব্যবহারের ক্ষেত্রে সুনির্দিষ্ট ছিলাম এবং যদি সে এটি প্রয়োগ করতে পারে তবে ফেলে দেওয়া হয়েছিল। আমার সমাধানটি আমার অ্যাপ্লিকেশনটির মধ্যে রয়েছে, তিনি উদাহরণ হিসাবে এটি ব্যবহার করতে পারেন।
ওয়েলক্লাউড

4
যদি আপনি আপনার ব্যবহারের কেস লোকের কাছে প্রদর্শন করতে চান তবে দয়া করে এটি সম্পর্কে একটি ব্লগ লিখুন। স্ট্যাকওভারফ্লো আপনার ব্যবহারের ক্ষেত্রে নয়, লোকেরা যে ক্যোয়ারী রয়েছে তার উত্তর দেওয়ার জন্য। এছাড়াও, আপনার ব্যবহার কেস বাস্তবায়ন সঠিক উপায় - <= থেকে = পুনর্চালনা "/" {{পথনাম: '/ YourRoute'}} />
Abhas
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.