2017-04-13 17 views
7

मैं प्रतिक्रिया राउटर के next संस्करण का उपयोग कर रहा हूं, और ऐसा लगता है कि यह पैराम छोड़ रहा है। मैं channelId के मान को बनाए रखने के लिए नीचे दिए गए रीडायरेक्ट की अपेक्षा करता हूं, लेकिन to मार्ग इसके बजाय पथ में शाब्दिक स्ट्रिंग ":channelId" का उपयोग करता है।प्रतिक्रिया राउटर रीडायरेक्ट ड्रॉप

<Switch> 
    <Route exact path="/" component={Landing} /> 
    <Route path="/channels/:channelId/modes/:modeId" component={Window} /> 
    <Redirect 
    from="/channels/:channelId" 
    to="/channels/:channelId/modes/window" /> 
</Switch> 

यह एक resolved issue की तरह दिखता है, लेकिन यह काम नहीं कर रहा। क्या to मार्ग पर जाने के लिए मुझे कुछ और चाहिए?

import pathToRegexp from 'path-to-regexp'; 
import { Route, Switch, Redirect } from 'react-router-dom'; 

const RedirectWithParams = ({ exact, from, push, to }) => { 
    const pathTo = pathToRegexp.compile(to); 
    return (
    <Route exact={exact} path={from} component={({ match: { params } }) => (
     <Redirect to={pathTo(params)} push={push} /> 
    )} /> 
    ); 
}; 

के उपयोग का उदाहरण:

+0

समाधान, मैट मिला? –

+0

@ सेबेस्टियनरोथ मैंने दुर्भाग्य से कभी नहीं किया। मैं घटक के भीतर रीडायरेक्ट का उपयोग कर, अब चीजों को एक अलग तरीके से कर रहा हूं। हालांकि, यह सत्यापित करना बहुत अच्छा होगा क्योंकि इसे उपरोक्त लिंक में विज्ञापित के रूप में काम करना चाहिए। –

+1

एफडब्ल्यूआईडब्ल्यू, मैंने इस प्रश्न को प्रतिक्रिया-राउटर डिस्कॉर्ड चैनल में पूछा है। मैंने ऐसा कुछ ऐसा करने के साथ समाप्त किया, जिस मार्ग में एक रेंडर विधि है जो प्रोप से खींचे गए मानों के साथ रीडायरेक्ट देता है। –

उत्तर

4

मैं रूटर 4 स्रोतों प्रतिक्रिया है, तो खुद वैकल्पिक हल बारे में ऐसी कोई तर्क पाया

<Switch> 
    <RedirectWithParams 
     exact from={'/resuorce/:id/section'} 
     to={'/otherResuorce/:id/section'} 
    /> 
</Switch> 
+0

लगभग आपके कोड के समान दिखता है: https://github.com/ReactTraining/react-router/blob/master/packages/react-router/modules/generatePath.js – coblr

+0

बहुत बहुत धन्यवाद यह वास्तव में मैं देख रहा था – Anil

2

यहाँ मैं क्या उपयोग कर रहे हैं, अन्य जवाब के समान है लेकिन एक निर्भरता के बिना:

<Route 
    exact 
    path="/:id" 
    render={props => (
    <Redirect to={`foo/${props.match.params.id}/bar`} />; 
)} 
/> 
0

आप ऐसा कर सकते हैं:

+०१२३५१६४१०
<Switch> 
    <Route exact path="/" component={Landing} /> 
    <Route path="/channels/:channelId/modes/:modeId" component={Window} /> 
    <Route 
    exact 
    path="/channels/:channelId" 
    render={({ match }) => (
     <Redirect to={`/channels/${match.params.channelId}/modes/window`} /> 
    )} 
    /> 
</Switch> 
0

मैं इस किया था, और यह काम किया:

<switch> 
 
    <Route path={`/anypath/:id`} component={Anycomponent} /> 
 
    <Route 
 
     exact 
 
     path="/requestedpath/:id" 
 
     render={({ match }) => { 
 
     if (!Auth.loggedIn()) { 
 
      return <Redirect to={`/signin`} />; 
 
     } else { 
 
      return <Redirect to={`/anypath/${match.params.id}`} />; 
 
     } 
 
     }} 
 
    /> 
 
</switch>

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