Несколько важных правил, чтобы состояние работало предсказуемо.
1. Состояние неизменяемо: не правьте объекты и массивы напрямую, создавайте новые. Чтобы добавить элемент в список:
const [items, setItems] = useState([]); setItems([...items, newItem]); // новый массив, не push!
2. Обновление по предыдущему значению делают через функцию — это надёжнее при частых изменениях:
setCount((prev) => prev + 1);
3. Состояние у каждого экземпляра компонента своё: два <Counter /> на странице считают независимо.
4. Хуки (useState и другие) вызывают только на верхнем уровне компонента — не внутри условий и циклов.
Состояние — сердце интерактивного React: введённый текст, открыто ли меню, загруженные данные, выбранная вкладка — всё это состояние.