如果我们想在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的任何使用将此保留会导致同步状态时出现问题。”
问题在于ConnectedRouter
是react-router
的连接版本,而不是react-router-dom
,因此其中没有类似Link
或NavLink
的东西。
肯定有某种方法,如果没有的话,我相信这个软件包在github上不会有3k个星星...
Link
中使用ConnectedRouter
?谢谢!答案 0 :(得分:1)
我建议您仅坚持使用react-router-dom。
不再需要将其连接到redux。过去可能有一个原因,因为很难读取当前路径名或搜索参数,因为只有主页组件才将它们作为位置接收。但是现在有了withRouter,您可以从任何地方阅读。
您还可以使用历史记录推送路线。过去这也令人头疼。