Вопрос проверяет понимание асинхронности обновлений состояния и проблемы устаревших значений.
Передача значения в setState напрямую подставляет новое состояние, а callback (функция-обновитель) вычисляет его на основе предыдущего. Callback гарантирует корректность при нескольких обновлениях подряд. Это особенно важно при асинхронных событиях и батчинге обновлений. В React hooks callback — это предпочтительный способ при зависимостях от старого состояния.
Хотя оба варианта обновляют состояние, они ведут себя по-разному в сложных сценариях.
Callback в setState — функция, которая получает предыдущее состояние и возвращает новое.
setCount(count + 1);
count может быть устаревшим.
Несколько вызовов могут быть объединены.
setCount(prev => prev + 1);
Всегда актуальное состояние.
Безопасно при батчинге.
Работает корректно в асинхронных колбэках.
Новое состояние зависит от предыдущего.
Несколько обновлений подряд.
Асинхронные события (таймеры, промисы).
Если новое состояние зависит от старого — всегда используй callback-форму setState, она надёжнее и предсказуемее.