Вопрос проверяет понимание асинхронной природы setState в React и умение работать с актуальным состоянием при множественных обновлениях.
В React метод setState является асинхронным. Это означает, что после вызова setState состояние не обновляется мгновенно. React может группировать несколько вызовов setState в один для оптимизации производительности. Если вы используете объектную форму setState, то при множественных вызовах вы рискуете получить устаревшее состояние, так как каждый вызов будет опираться на одно и то же начальное значение.
Callback-версия setState принимает функцию, которая получает два аргумента: предыдущее состояние (prevState) и текущие пропсы (props). Это гарантирует, что вы всегда работаете с актуальными данными, даже если несколько вызовов setState происходят последовательно.
// Проблема с объектной формой
this.setState({ count: this.state.count + 1 });
this.setState({ count: this.state.count + 1 });
// Результат: count увеличится только на 1, а не на 2
// Правильное решение с callback
this.setState((prevState) => ({ count: prevState.count + 1 }));
this.setState((prevState) => ({ count: prevState.count + 1 }));
// Результат: count увеличится на 2Используйте callback-версию setState всегда, когда новое состояние зависит от предыдущего. Это предотвращает баги, связанные с устаревшими данными, и делает код более предсказуемым. Объектная форма безопасна только для простых случаев, где новое состояние не зависит от старого.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию