反应路由器与window.location不同步?

时间:2020-11-09 12:54:43

标签: react-router react-router-dom

我无法使客户端路由正常工作(使用react-router-dom@5.2.0)

我有一个<Application>组件,它返回:

<BrowserRouter>
  <Switch>
    <Route path="/:filter/:id">
      <Something...>
    </Route>
    <Route path="/">
      <SomethingElse...>
    </Route>
  </Switch>
</BrowserRouter>

每当我导航到[localhost]/rating/good时,事情就会按预期进行:匹配正确的路线(即"/:filter/:id")并呈现<Something>组件。

我有一个按钮可以清除我所说的过滤器;每当我点击它时:

  • 我使用useHistory().push('/')更新URL
    立即观察到变化
  • 我更新了AppState,这触发了我的<Application>组件的更新,这又意味着<BrowserRouter><Route>的更新。

那是我观察到意想不到的事情的时候:

尽管当前URL路径名为path="/:filter/:id",但仍匹配与之前相同的路由(即<Something>)并呈现了"/"组件。

这是预期的行为吗?
如果是,如果不是当前window.location,则react-router用什么来匹配路由?

现在,我将<Application>更新为:
const location = { ...useLocation(), pathname: window.location.pathname }

并像这样传递location对象:
<Switch location={location}>

但是感觉好像我做错了,它应该工作而无需我摆弄位置对象。

感谢任何提示!

0 个答案:

没有答案