Странное поведение, вероятно, из-за того, что вы использовали async
для реализации componentDidMount
.
В настоящее время весь процесс рендеринга React является синхронным, поэтому все, что связано с его потоком рендеринга, должно рассматриваться как синхронное.И случается, что в настоящее время команда React также разрабатывает функцию критических изменений, чтобы разрешить асинхронный рендеринг .
Но!Даже после того, как эта функция станет доступной, имейте в виду, что componentDidMount
ловушка жизненного цикла будет по-прежнему синхронной, а также все остальные ловушки, поэтому важно знать, что React не будет ждать, пока какое-либо обещание будет разрешено.внутри крючки.
Вы можете запустить Обещание внутри componentDidMount
, если оно соответствует вашему варианту использования, и позволить разрешенному результату изменить состояние.Но перехват жизненного цикла завершится до того, как он разрешится, это повлияет на ваш тестовый пример, поскольку тесту нужно будет дождаться обработки этого результата разрешенного Обещания, прежде чем его утверждать, вы можете использовать jest.runAllTicks () чтобы гарантировать такое поведение.