Middle
In un componente React funzionale ci sono due chiamate a setState in modo sincrono, poi una funzione asincrona, e poi altre tre chiamate a setState. Quanti rendering si verificheranno in React 18 e React 17? Cos'è il batching e quando è apparso?
sobes.tech AI
Risposta dell'AI
В React 17 и более ранних версиях batching (пакетная обработка обновлений состояния) происходила только внутри обработчиков событий React. Это значит, что несколько вызовов setState внутри одного обработчика объединялись в один рендер.
Если в функциональном компоненте есть два вызова setState подряд, затем асинхронная функция, затем ещё три вызова setState, то:
-
В React 17:
- Первые два вызова
setStateв одном синхронном блоке будут объединены в один рендер. - Асинхронная функция (например,
setTimeoutили промис) прервёт batching, поэтому следующие три вызоваsetStateбудут обработаны отдельно, каждый может вызвать отдельный рендер, если они не объединены вручную. - Итого: минимум 4 рендера (1 после первых двух вызовов, и до 3 после каждого из трёх вызовов после асинхронного кода).
- Первые два вызова
-
В React 18:
- Появился расширенный автоматический batching, который объединяет все вызовы
setState, включая асинхронные (например, внутри промисов, таймаутов и т.п.). - Все 5 вызовов
setState(2 до асинхронной функции и 3 после) будут объединены в один рендер. - Итого: 1 рендер.
- Появился расширенный автоматический batching, который объединяет все вызовы
Что такое batching? Batching — это механизм объединения нескольких обновлений состояния в один рендер, чтобы повысить производительность и избежать лишних перерисовок.
Когда появился расширенный batching? Расширенный автоматический batching появился в React 18, что значительно улучшило производительность при работе с асинхронным кодом.