我正在使用这个名为react-router-modal的库,它提供了一些用于创建具有react-router路由的模式的实用程序 .

目前正在尝试实现类似于Twitter的“查看推文”UI,因此我将使用他们的术语作为示例 . 如果您不熟悉,Twitter将在包含推文和回复的当前页面上打开一个模式 .

推文应该有自己的路由,让's say it' s /tweet/:id . 我在我的应用程序的根级别的Switch中也有几个页面:

<Switch>
  <Route path="/user/:username" component={UserPage} />
  <Route path="/" component={Dashboard} />
</Switch>

在那之后,我宣布我的“推文”模式的路线:

<ModalRoute
  path="/tweet/:tweetId"
  parentPath={/* what route to load when Modal is closed */}
  component={ModalTweet}
/>

当我坐在 / 的仪表板页面上时,这很好用 . 但是,如果我在UserPage上并尝试打开此模式,则路径将更改为 /tweet/12345 ,并且在Tweet模式打开时,根级别开关默认为背景中的仪表板页面 .

我希望能够告诉UserPage组件,“继续渲染前一个路径( /user/xyz ),好像路径没有改变”,当 /tweet/:tweetId 路径被激活时 . 这是可能的,如果没有,那么我可以对这里的结构做些什么让它按照我的意图工作?我知道react-router-last-location但我是'm not sure how to apply its output to this problem, other than passing its value to the ModalRoute'的parentPath(它没有想到) .

我考虑使用通配符来处理像 /user/xyz/tweet/123 这样的路径,但出于几个原因我不想走这条路 . 我考虑的另一件事是在路由更改时将 :userId 从上一个路径传递到UserPage组件作为单独的prop,并设置路由以便在这种情况下渲染而不是Dashboard,但这感觉很麻烦并且我试过了它,所以如果这是最好的选择,那么我会 .

在此先感谢您的任何建议!我很反应路由器 .

编辑:这是一个很好的示范问题,不是由我做的:https://codesandbox.io/s/yq1kkppp19

请注意,上面的示例不包括我的问题的所有复杂性:我需要路径数据来呈现底层页面,并呈现模态的内容 . 在这个例子中没有路径参数 .