Как это работает
Состояние — это данные компонента, которые могут меняться
В блоке 2 мы говорили о состоянии как о временной памяти приложения. В React это понятие более конкретно: состояние (state) — это данные, которые компонент помнит между перерисовками и которые могут изменяться в ответ на действия пользователя.
Примеры состояния: что ввёл пользователь в поле поиска, открыт ли выпадающий список, сколько товаров в корзине, какой шаг формы сейчас активен. Всё это — данные, которые меняются прямо в браузере, без обращения к серверу.
Главное свойство React — реактивность: когда состояние меняется, React сам находит все части экрана, которые это состояние показывают, и обновляет только их. Вам не нужно вручную лезть в DOM (структуру страницы, о которой мы говорили в блоке 1) и переписывать элементы — вы меняете значение, React обновляет вид.
Чтобы завести состояние в компоненте, агент использует useState — это встроенный инструмент React, который даёт вам: (1) текущее значение и (2) функцию, чтобы его поменять. Как только вы вызываете эту функцию, React перерисовывает компонент с новым значением. Синтаксис сейчас не важен — важно понимать, что useState = «значение + кнопка обновить».
📌 Простая проверка: если что-то на экране должно меняться в ответ на действия пользователя — это кандидат на состояние (state). Если данные приходят снаружи и компонент их только показывает — это пропсы (из прошлого урока).
Когда состояния становится много
Prop drilling и общее состояние
Каждый компонент может держать своё состояние. Но что если одни и те же данные нужны сразу нескольким компонентам в разных частях дерева?
Один способ — передавать данные пропсами от родителя к детям, от детей — к их детям, и так далее. Это работает, но быстро становится неудобным: промежуточные компоненты получают пропс только для того, чтобы передать его дальше, хотя сами его не используют. Этот антипаттерн называют prop drilling (протаскивание пропсов) — как сверлить дырку через все этажи, чтобы протянуть провод.
Для таких случаев существуют инструменты общего состояния. Context — встроенный механизм React: вы кладёте данные в «контейнер», и любой компонент в поддереве может их прочитать напрямую, минуя промежуточные уровни. Стор (store — Zustand, Redux) — внешняя библиотека, которая делает то же самое, но гибче и удобнее при сложных данных: это центральная «коробка» с состоянием, к которой обращаются любые компоненты приложения.
📌 Простое правило: если агент предлагает Context или Zustand — значит, одни и те же данные нужны в нескольких местах, и таскать их пропсами уже неудобно. Это нормальный рост приложения, не проблема.