2017-04-13 22 views
7

Tôi đang sử dụng phiên bản next của Bộ định tuyến phản ứng và có vẻ như đang giảm tham số. Tôi hy vọng chuyển hướng bên dưới giữ lại giá trị của channelId, nhưng tuyến đường to sử dụng chuỗi ký tự ":channelId" trong đường dẫn thay thế.Chuyển hướng bộ định tuyến phản ứng giảm param

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

Điều này trông giống như resolved issue, nhưng không hoạt động. Có điều gì khác tôi cần phải chuyển đến tuyến đường to không?

+0

Bạn có tìm ra giải pháp, Matt? –

+0

@SebastianRoth Tôi không bao giờ làm, thật không may. Tôi đang làm mọi thứ theo cách khác, sử dụng chuyển hướng trong chính thành phần đó. Tuy nhiên, nó sẽ là tuyệt vời để có được điều này xác minh bởi vì nó sẽ làm việc như quảng cáo trong các chủ đề liên kết ở trên. –

+1

FWIW, tôi đã hỏi câu hỏi này trong kênh Discord phản ứng-bộ định tuyến. Tôi đã làm một cái gì đó tương tự, với một con đường có một phương thức render trả về một Redirect với các giá trị được lấy từ các đạo cụ. –

Trả lời

4

tôi thấy không có logic như vậy trong Phản ứng Router 4 nguồn khác nhau, nên viết workaround riêng:

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} /> 
    )} /> 
    ); 
}; 

sử dụng ví dụ:

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

Dường như gần giống với mã của bạn: https://github.com/ReactTraining/react-router/blob/master/packages/react-router/modules/generatePath.js – coblr

+0

cảm ơn rất nhiều điều này chính xác là tôi đang tìm kiếm – Anil

2

Dưới đây là những gì tôi đã sử dụng, tương tự như câu trả lời khác nhưng không có sự phụ thuộc:

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

Bạn có thể thực hiện việc này:

<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

Tôi đã làm điều này, và nó làm việc:

<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>

Các vấn đề liên quan