Ответ
В 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]);