Этап 5 из 12 · ≈ 3 ч

Zustand

Альтернатива с Junior

Минималистичное глобальное хранилище на хуках.

const useCart = create((set) => ({
  items: [],
  add: (item) => set((s) => ({ items: [...s.items, item] })),
}));

const count = useCart((s) => s.items.length);   // подписка на часть состояния

Что важно знать

  • Хранилище — хук; не нужен провайдер, мало кода.
  • Селектор в хуке ограничивает перерисовки нужной частью состояния.
  • Хорош для небольших и средних приложений; для серверных данных всё равно лучше TanStack Query.
  • Другие легковесные варианты — Jotai (атомы), MobX (наблюдаемые объекты).

Критерии освоения

Junior ≈ 3 ч

  • Создаёт хранилище Zustand и подписывается на его часть селектором

Практика. Сделать корзину на Zustand с сохранением в localStorage.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Как создать хранилище Zustand и подписаться на его часть?Junior

create создаёт хук-хранилище: состояние и функции изменения в одном объекте, без провайдера. Компонент подписывается селектором — useCart(s => s.items.length) — и перерисовывается, только когда выбранная часть изменилась. Изменения — через set, неизменяемо…

Полный разбор
Как управлять состоянием в React-приложении — Context, Redux, Zustand, серверное состояние?Junior

Сначала — локальное состояние и подъём к общему предку. Context — передать редко меняющиеся данные глубоко (тема, пользователь, язык) без прокидывания props. Глобальное хранилище (Redux Toolkit, Zustand) — сложное клиентское состояние, которое меняют многие…

Полный разбор
Почему в React нельзя изменять состояние напрямую?Junior

React узнаёт об изменении, сравнивая ссылки (Object.is). Мутация (items.push(x), user.name = ...) оставляет ссылку прежней — перерисовки не будет, а memo и useEffect не увидят изменений. Состояние обновляют новым объектом: spread, map, filter, toSorted.

Полный разбор
Как работает useState?Junior

const [value, setValue] = useState(initial) — React хранит значение вне функции компонента, привязав его к позиции хука; при следующих рендерах возвращает текущее. setValue планирует перерисовку; если новое значение равно старому (Object.is) — рендер…

Полный разбор

Документация

← Вся карта «React»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования