【发布时间】:2020-04-22 11:07:56
【问题描述】:
在我的 React 应用程序中,从主页导航到子页面然后点击后退按钮后,React <Router> 显示其内部状态与从 history 传递的道具不匹配的位置以及不正确的 <Route>为地址栏中当前显示的 URL 显示
<Route> 的内容确实发生了变化;数据由位置更改 Redux 操作更新。显示的<Route>显示的是新数据,但是是错误的<Route>。
应用的基本结构是:
<Root> (custom)
<Provider> (react-redux)
<ConnectedRouter> (connected-react-router)
<App> (custom)
<Switch> (react-router-dom)
<Route path="/" exact /> (react-router-dom)
<Route path="/quality:q" /> (react-router-dom)
最初我们导航到根目录,<Route path="/> 正确显示。我们单击一个链接,该链接正确地将我们带到<Route path="/quality/:q" />。从那里我们返回浏览器,URL 更改为 /,但 <Route path="/quality:q" /> 仍然显示,但它不应该再显示了。
Redux devtools 显示了这个渲染树,我在其中包含了一些由我们明确使用的组件添加的关键组件。
<Root> (custom)
<Provider> (react-redux)
<ConnectedRouter> (connected-react-router)
<Router> (injected)
<Context.Provider> (injected)
<App> (custom)
<Switch> (react-router-dom)
<Route path="/" exact /> (react-router-dom)
<Route path="/quality:q" /> (react-router-dom)
当处于这种错误状态时,直到<ConnectedRouter> 的所有内容都是正确的。 <ConnectedRouter> 有一个单独的 prop,它是 history,它具有正确的位置,即根。
紧随其后的<Router> 不匹配。它有一个 history 属性,没问题,但它有一个陈旧的 location 状态,显示旧网址。
当错误的位置数据被上下文传递给<Route>s 时,他们会从location 属性中获得检查路径,该属性匹配<Router> 的陈旧状态。结果,渲染了错误的<Route>。
我无法弄清楚我做了什么导致这种不匹配。这都是简单的路线,并使用<Link> 组件作为从主页到子页面和返回的所有链接。
以前有没有人见过这个和/或可以指出如何解决这个问题的方向?
【问题讨论】:
-
我遇到了类似的问题,history.location 正确但 location 不正确,您能找出原因吗?
标签: reactjs react-router react-router-redux connected-react-router