Por que esse erro existe: "Violação invariável: não é possível atualizar durante uma transição de estado existente"

Parece que estou encontrando esse erro em um aplicativo grande (mas não sei exatamente onde):

Erro não capturado: Violação invariável: setState (...): Não é possível atualizar durante uma transição de estado existente (como emrender) Os métodos de renderização devem ser uma função pura de adereços e estado.

Eu suspeito que possa ser o resultado do usosetState dentro desetTimeout ousetInterval.

O que me leva à minha verdadeira pergunta: por que esse erro existe? Existe alguma razão conceitual que eu estou perdendo porque o ReactJS não apenas coloca na fila as alterações de estado e de prop? Suponho que, se houver um motivo, isso tem a ver com a complexidade do aplicativo e / ou com as condições de corrida ...

Minha próxima pergunta seria: qual é a maneira correta de atualizar um componente fora do React (durante algum evento assíncrono, por exemplo) para que esse erro não ocorra?

Editar:

Depois de aprofundar esse assunto, parece que o culpado é realmente a plataforma subjacente que estou usando (ElectronJS, formalmente Atom Shell). Basicamente, o ElectronJS combina Chromium e NodeJS juntos. Eu estava usando uma API do NodeJS para fazer algo assíncrono e, quando isso terminava, o ElectronJS retornava à pilha de chamadas onde parou, ignorando completamente o loop de eventos e causando uma condição de corrida com o React.

questionAnswers(2)

yourAnswerToTheQuestion