Выбор ответа Junior React 18-19: Suspense, transitions, RSC обновлено
Автоматический батчинг
Вопрос
Сколько рендеров вызовет этот код в React 18+ после ответа сервера?
fetch('/api/user').then(async (r) => {
const user = await r.json();
setUser(user);
setLoading(false);
setError(null);
});
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Один: обновления внутри промиса объединяются. С React 18 при createRoot автоматический батчинг работает везде: в промисах, таймерах, нативных обработчиках.
Варианты ответа
- Один: обновления внутри промиса объединяютсяправильный ответ
- Три: по одному на каждый
setStateвthen - Два: первый
setStateсинхронный, остальные вместе - Ноль: внутри
thenсостояние менять нельзя
Разбор
С React 18 при createRoot автоматический батчинг работает везде: в промисах, таймерах, нативных обработчиках. Три вызова дадут один рендер. В React 17 вне обработчиков React было бы три рендера.
- Три рендера были бы в React 17.
- Особого статуса у первого вызова нет.
- Менять состояние в
thenможно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.