Реагирует на роутер history.push () не работает из history.listen () - PullRequest
0 голосов
/ 07 ноября 2018

В моем приложении 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 в качестве единственного средства навигации по остальной части приложения, которое все еще работает, поэтому я не знаю, почему оно не работает из этого файла.

Даже при импорте объекта истории в другие файлы .js, которые не являются частью моего дерева компонентов React, можно вызвать history.push и обновить его.

Любая помощь приветствуется!

Редактировать: Моя react-router-dom версия пакета ^4.4.0-alpha.0 и React 16.4.0

1 Ответ

0 голосов
/ 09 ноября 2018

Спасибо Толле за ответ:

Моя проблема была исправлена ​​заменой каждого history.push() на setTimeout(() => history.push(), 0);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...