2017-12-06 16 views
6

मैं प्रतिक्रिया-राउटर आईडी में प्रतिशत चिह्न का उपयोग करने का प्रयास कर रहा हूं। यूआरआई में % का उपयोग करने के लिए वर्जित है, मुझे इस प्रतिशत चिह्न का उपयोग करने में सक्षम होने के लिए मैन्युअल रूप से मेरे यूआरआई को एन्कोड करना होगा। एक लिंक का उपयोग करना, इसलिए मैं encodeURI समारोह यूआरआई सांकेतिक शब्दों में बदलना करने के लिए उपयोग: मेरे पृष्ठ के स्रोत कोड मेंप्रतिक्रिया-राउटर में प्रतिशत (%) साइन का उपयोग करना: आईडी

<Link to={`/r/${encodeURI(my_str_with_unencoded_percent_sign)}`} > 

, मैं उस लिंक %25 और नहीं % का उपयोग करता है देख सकते हैं।

फिर भी, लिंक पर क्लिक करते समय, मुझे त्रुटि मिलती है "URIError: malformed URI अनुक्रम" (मेरे कोड के दूसरे भाग में, मेरे पास <Match pattern="/r/:id" … है)।

मैंने क्या गलत किया? ऐसा लगता है कि यूआरएल को से पहले डीकोड किया गया है, जो प्रतिक्रिया-राउटर के पारसेपरम फ़ंक्शन पर पारित किया जा रहा है, जो इसे दूसरी बार डीकोड करने का प्रयास करता है, जो इस त्रुटि को जन्म देता है।

मुझे https://github.com/ReactTraining/history/issues/461 या https://github.com/ReactTraining/history/issues/461 जैसे मुद्दे मिले, लेकिन मुझे इस समस्या का कोई समाधान नहीं मिला: मैं प्रतिक्रिया-राउटर में एक प्रतिशत चिह्न का उपयोग कैसे कर सकता हूं: आईडी?

उत्तर

1

यहां रीमार्केटिंग प्रशिक्षण द्वारा प्रदान किए गए URL Parameters उदाहरण का एक संशोधित संशोधित संस्करण है।

नीचे अपनी अनुक्रमणिका.जेएस में पेस्ट करें और इसे देखने के लिए इसे जांचें। मैं आपके लिए इसका एक कोडैंडबॉक्स प्रदान करने जा रहा था, लेकिन उनके आंतरिक मार्ग में ऐसे मुद्दे हैं जो यूरी एन्कोडेड% संकेतों के साथ भी काले रंग में जाने का कारण बनते हैं ... मैंने स्थानीय रूप से इसका परीक्षण किया और एक आकर्षण की तरह काम किया।

import React from "react"; 
import { render } from "react-dom"; 
import { BrowserRouter as Router, Route, Link } from "react-router-dom"; 

const ParamsExample =() => (
    <Router> 
    <div> 
     <h2>Accounts</h2> 
     <ul> 
     <li><Link to={`/${encodeURI("%netflix")}`}>Netflix</Link></li> 
     <li><Link to="/zillow-group">Zillow Group</Link></li> 
     <li><Link to="/yahoo">Yahoo</Link></li> 
     <li><Link to="/modus-create">Modus Create</Link></li> 
     </ul> 

     <Route path="/:id" component={Child} /> 
    </div> 
    </Router> 
) 

const Child = ({ match }) => (
    <div> 
    <h3>ID: {match.params.id}</h3> 
    </div> 
) 

render(<ParamsExample />, document.getElementById("react")); 
+0

हाय। आपके उत्तर के लिए धन्यवाद। दरअसल, आपका समाधान तब काम करता है जब मैं पृष्ठ पर प्रदर्शित लिंक पर क्लिक करता हूं, लेकिन पृष्ठ को रीफ्रेश करते समय यह काम नहीं करता है: अगर मैं «नेटफ्लिक्स» लिंक पर क्लिक करता हूं, तो यह मुझे सही रूप से आईडी दिखाता है, जैसा कि अपेक्षित है, और यह यूआरएल बदलता है मेरे वेब नेविगेटर में "http: //domain.tld/%netflix" में। F5, या ctrl + R का उपयोग करके ताज़ा करते समय, मुझे अभी भी वही त्रुटि मिलती है। क्या उम्मीद है? टेस्ट कोड यहां है (केवल आसान ज़िप डाउनलोड के लिए, जैसा कि आपने कहा था, कोडंडबॉक्स टूटा हुआ है और एक वेब पेज दिखाता है): https://codesandbox.io/s/zj7ok3l5x –

+0

आपको 'विकृत यूआरएल' त्रुटि मिल रही है सीधे उस यूआरएल पर नेविगेट करने की कोशिश करने से जिसमें '%' या एक यूआरएल होता है जिसमें एन्कोडेड '%' होता है? –

+0

ठीक है, यूआरएल में एक% (गैर एन्कोडेड, यूआरएल बार में) होता है, जबकि इसमें एन्कोडेड% होना चाहिए क्योंकि मैं एन्कोडुरि फ़ंक्शन का उपयोग करता हूं। फिर भी, प्रतिक्रिया-राउटर एन्कोडिंग को समझता है, क्योंकि लिंक पर क्लिक करने से सही रूट पर रीडायरेक्ट किया जाता है। –

संबंधित मुद्दे