Я только что обнаружил, что в реакции this.setState()
функция в любом компоненте является асинхронной или вызывается после завершения функции, в которой она была вызвана.
Теперь я искал и нашел этот блог (setState() Операция мутации состояния может быть синхронной в ReactJS)
Здесь он обнаружил, что setState
является асинхронным (вызывается, когда стек пуст) или синхронизируется (вызывается сразу после вызова), в зависимости от того, как было инициировано изменение состояния.
Теперь эти две вещи трудно переварить.
- В блоге функция
setState
вызывается внутри функцииupdateState
, но то, что вызвало функциюupdateState
, не является тем, о чем должна знать вызываемая функция. - Почему они делают
setState
асинхронным, поскольку JS является однопоточным языком, и этот setState не является вызовом WebAPI или сервера, поэтому должен выполняться только в потоке JS. Делают ли они это так, чтобы повторный рендеринг не останавливал всех слушателей событий и прочее, или есть какая-то другая проблема дизайна.