React 路由器 history.push() 无法从 history.listen() 工作

React router history.push() not working from history.listen()

在我的 React 应用程序中,我使用 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 之后,listen 函数内的推送突然没有导致更新 DOM(但更改了 URL)。

我不知道是什么原因造成的,我使用 history.push 作为导航整个应用程序其余部分的唯一方式,它仍在运行,所以我不知道为什么不适用于此文件。

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

感谢任何帮助!

编辑:我的 react-router-dom 包版本是 ^4.4.0-alpha.0,React 16.4.0

感谢托勒的回答:

我的问题已通过将每个 history.push() 替换为 setTimeout(() => history.push(), 0);

得到解决