反应路由器history.push()无法从history.listen()运行

时间:2018-11-07 19:17:05

标签: javascript reactjs react-router-dom

在我的React应用程序中,我使用carSectionTitles进行路由。我有一个自定义的react-router-dom对象,该对象传递给我的history(不是Router)对象,因此可以在历史记录对象上配置侦听处理程序。

BrowserRouter

这在过去几个月中一直很好,但是,在最近更新我的import { createBrowserHistory } from 'history'; import auth from './auth'; const history = createBrowserHistory(); history.listen((location) => { if(location.pathname !== '/login'){ if(!auth.getToken()){ history.push('/login'); } } }); export default history 之后,突然node_modules函数内部的推送并没有导致DOM的更新(而是更改了URL)。

我不知道是什么原因造成的,并且我将listen作为浏览整个应用程序其余部分的唯一方法,该功能仍在工作,所以我不知道为什么它不起作用。无法使用此文件。

即使将历史对象导入不属于我的React组件树的其他.js文件中,也可以调用history.push并对其进行更新。

感谢您的帮助!

编辑:我的history.push软件包的版本是react-router-dom,而React ^4.4.0-alpha.0

1 个答案:

答案 0 :(得分:1)

感谢Tholle的回答:

我的问题得以解决,方法是将每个history.push()替换为setTimeout(() => history.push(), 0);