- Нет не гарантирует и не может гарантировать.Браузер "решает" перерисовать dom-дерево ПОСЛЕ того как все манипуляции со стейтом были выполнены или отложены это уже стейт решает как правильно обновить синхронно или асинхронно.Может и так и так.И после всех этих обновлений компонент завершает свою работу и возвращает готовый html (jsx) код.
- Все зависет от того что вы делаете в данном жизненном цикле.Если меняете стейт без условий внутри didUpdate то компонент вообше не будет отрисоватсья покажет ошибку что у вас бесконечный цикл.didUpdate вызывается сразу после обновления компонента ( не при первом рендере ) .А если внутри didmount изменить стейт события будет следуишие
Компонент рендерится первый раз. return возврашаеть новый DOM. componentDidMount вызывается и меняет стейт СИНХРОННО. Если меняетсья состояние то и соответсвенно метод render вызывается еще раз и возврашает новый JSX который заменяет старый. А браузер показывает только второй рендер, чтобы избежать мерцания.