【问题标题】:relative routing in react-routerreact-router中的相对路由
【发布时间】:2016-11-18 22:24:57
【问题描述】:

有谁知道如何为任何以 '/popup-image-:id' 结尾的路径创建?我有一个网站,每个图像都可以在任何页面的弹出窗口中打开。所以,如果我无法实现 '/popup-image-:id' 我必须将我网站中的每条路线加倍以放置在里面。我想避免冗余和脆弱。 我目前的路线:

<Router history={browserHistory}>
   <Route path="/" component={Base}>
      <Route path="profile" component={Profile}>
         <Route path="popup-image-:id" component={Full_Piture} />
      </Route>
      <Route path="feed" component={Feed_List}>
         <Route path="popup-image-:id" component={Full_Piture} />
      </Route>
      <Route path="user-:id" component={User_Page}>
         <Route path="popup-image-:id" component={Full_Piture} />
      </Route>      
   </Route>
</Router>

如您所见,我不得不产生大量重复的代码。如果我能写出类似&lt;Route path="*/popup-image-:id" component={Full_Piture} /&gt; 这样的代码,代码会更加简洁和可靠

【问题讨论】:

  • 你使用的是哪个 react-router 版本?
  • npm info react-router version 显示 3.0.0 npm list --depth=0 显示 react-router@2.8.1

标签: javascript reactjs routing react-router


【解决方案1】:

&lt;Route&gt; 也应该匹配吗?如果不是,您应该可以使用** 语法。

<Route path="/**/popup-image-:id" component={Full_Picture} />

如果父级 &lt;Route&gt; 也应该匹配,您可以创建一个 &lt;RouteWithPopup&gt; 组件,该组件返回一个 &lt;Route&gt;,其中 &lt;Route path='popup-image-:id'&gt; 作为其子级。

const RouteWithPopup = (props) => {
  return (
    <Route {...props}>
      <Route path="popup-image-:id" component={Full_Picture} />
    </Route>
  )
}

然后你可以把你的路由配置变成:

<Router history={browserHistory}>
  <Route path="/" component={Base}>
    <RouteWithPopup path="profile" component={Profile} />
    <RouteWithPopup path="feed" component={Feed_List} />
    <RouteWithPopup path="user-:id" component={User_Page} />
  </Route>
</Router>

【讨论】:

  • 哇!这对我有用!谢谢!我很高兴有这个解决方案购买方式也许你知道如何为这个路径“/**/popup-image-:id”创建所有链接?目前我使用上下文位置来获取当前路径并在最后附加“/popup-image-:id”。但我收到烦人的警告
  • React Router 不支持 中的相对位置,因此很遗憾您需要手动创建路径名。您收到什么警告?
  • 感谢您的澄清。关于错误:我使用从路由器获得的位置路径名。然后我使用 mobx-react 库中的 组件。它将位置路径名传播到任何需要它的内部组件。因此,错误是“MobX 提供者:提供的商店'位置'已更改。请避免替换商店,因为更改可能不会传播到所有孩子”由提供者生成。我认为这个问题与 mobx-react 有关。
  • 你得到的警告肯定来自 mobx-react。我对 mobx 不是特别熟悉,但也许这个github.com/alisd23/mobx-react-router 会有用。