在Redux中使用React Router

时间:2019-06-16 12:26:05

标签: javascript reactjs redux react-router connected-react-router

如果我们想在redux中以编程方式更改路由,则可以使用react-router-redux npm软件包。但是它是由其作者存档的。现在推荐的解决方案是connected-react-router

https://www.npmjs.com/package/connected-react-router

但是正如文档中的文档所述,应使用react-router的INSTEAD使其起作用。

通常我使用的是react-router-dom

import { BrowserRouter } from 'react-router-dom';

<BrowserRouter>
   <Route path='/' />
   <Route path='/hey' />
</BrowserRouter>

但是正如文档所说,我必须用软件包中的react-router v4/v5替换ConnectedRouter

import { ConnectedRouter } from 'connected-react-router';

<ConnectedRouter history={history}>
   <Route path={'/'} />
   <Route path={'/foo'} />
</ConnectedRouter>

但是这种情况导致Link中的react-router-dom出现问题。 Link必须放置在BrowserRouter内,但我之所以不能使用它,是因为没有BrowserRouter,因为“ DOCS ARE SAYIN-”记住要删除对BrowserRouter或NativeRouter的任何使用将此保留会导致同步状态时出现问题。”

问题在于ConnectedRouterreact-router的连接版本,而不是react-router-dom,因此其中没有类似LinkNavLink的东西。

肯定有某种方法,如果没有的话,我相信这个软件包在github上不会有3k个星星...

问题:如何在Link中使用ConnectedRouter?谢谢!

1 个答案:

答案 0 :(得分:1)

我建议您仅坚持使用react-router-dom。

不再需要将其连接到redux。过去可能有一个原因,因为很难读取当前路径名或搜索参数,因为只有主页组件才将它们作为位置接收。但是现在有了withRouter,您可以从任何地方阅读。

您还可以使用历史记录推送路线。过去这也令人头疼。