Функция SetState синхронная или асинхронная

«Функция SetState синхронная или асинхронная» — вопрос из категории React, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В React setState (и его аналог в функциональных компонентах — useState) работает асинхронно. React может группировать несколько вызовов setState в один для оптимизации производительности.

Пример:

const [count, setCount] = useState(0);

const handleClick = () => {
  setCount(count + 1); // Асинхронное обновление
  console.log(count); // Старое значение, т.к. обновление ещё не произошло
};

Как получить актуальное состояние?

  • В классовых компонентах — через колбэк:

    this.setState({ count: this.state.count + 1 }, () => console.log(this.state.count));
  • В функциональных — через useEffect:

    useEffect(() => { console.log(count); }, [count]);