Почему существует эта ошибка: «Нарушение инварианта: невозможно обновить во время существующего перехода состояния»

Кажется, я сталкиваюсь с этой ошибкой в ​​большом приложении (но я не совсем уверен, где):

Uncaught Ошибка: Инвариантное Нарушение: setState (...): Невозможно обновить во время существующего перехода состояния (например, вrender). Методы рендеринга должны быть чистой функцией реквизита и состояния.

Я подозреваю, что это может быть результатом использованияsetState ВнутриsetTimeout или жеsetInterval.

Что приводит меня к моему настоящему вопросу: почему существует эта ошибка? Есть ли какая-то концептуальная причина, по которой мне не хватает, почему ReactJS не просто ставит в очередь состояние и поддерживает изменения? Я предполагаю, что если есть причина, это связано со сложностью приложения и / или избеганием условий гонки ...

Тогда мой следующий вопрос будет таким: как правильно обновить компонент вне React (например, во время какого-то асинхронного события), чтобы эта ошибка не возникала?

Редактировать:

После некоторого углубления в эту проблему, похоже, виновник на самом деле является основной платформой, которую я использую (ElectronJS, формально Atom Shell). По сути, ElectronJS объединяет Chromium и NodeJS вместе. Я использовал API-интерфейс NodeJS для выполнения чего-то асинхронного, и, как только это закончится, ElectronJS просто вернется обратно в стек вызовов, где он остановился, полностью обходя цикл событий и, таким образом, вызывая состояние гонки с React.

Ответы на вопрос(2)

Ваш ответ на вопрос