如何使用 React Router 修改作为 props 发送的路由参数?

Posted

技术标签:

【中文标题】如何使用 React Router 修改作为 props 发送的路由参数?【英文标题】:How do I modify the route parameters sent as props with React Router? 【发布时间】:2016-12-16 17:12:49 【问题描述】:

我有一个 React Router,其路由如下:

<Router history=history>
  <Route path='/' component=App />
  <Route path='/:fileType/:fileId' component=App />
</Router>

这会将道具放入我的App,如下所示:


  fileType: 'whatever', 
  fileId: 'ABC5734'

但是,我已经设计了我的组件,因此它需要这种格式:


  file: 
    type: 'whatever', 
    id: 'ABC5734'
  

因此,我想在将路径道具发送到组件之前对其进行转换。像这样的:

<Router history=history>
  <Route path='/' component=App />
  <Route 
    path='/:fileType/:fileId' 
    component=(props) => <App file=type: props.fileType, id: props.fileId /> />
</Router>

这可能吗?

【问题讨论】:

【参考方案1】:

您应该使用高阶组件。

您可以使用来自recomposemapProps 高阶组件:

import mapProps from 'recompose/mapProps'

<Router history=history>
  <Route path='/' component=App />
  <Route 
    path='/:fileType/:fileId' 
    component=mapProps(( params:  fileType, fileId  ) => (
        fileType,
        fileId
    ))(App)/>
</Router>

【讨论】:

【参考方案2】:

React-router 在this.props.params 下发送路由参数。因此,请更正您的代码。

<Router history=history>
  <Route path='/' component=App />
  <Route 
    path='/:fileType/:fileId' 
    component=(props) => <App file=type: props.params.fileType, id: props.params.fileId /> />
</Router>

【讨论】:

(props) =&gt; &lt;App file=type: props.params.fileType, id: props.params.fileId /&gt; 本身就是一个哑组件,以 App 组件为子组件。

以上是关于如何使用 React Router 修改作为 props 发送的路由参数?的主要内容,如果未能解决你的问题,请参考以下文章

将 url id 从 react-router 传递给 mongoose

如何避免 React Router 私有路由中的无限循环?

如何使用 react-router-component 更新页面

如何使用 react-router-dom 创建动态路由?

如何将 React Router 与 Electron 一起使用?

如何使用 React Router V5 默认滚动到顶部?