Jotai, Zustand и Context: что и когда использовать
Сравнивайте атомарную модель Jotai с хранилищем Zustand и React Context, чтобы выбрать подходящий инструмент для каждой задачи
«Jotai, Zustand и Context: что и когда использовать» — бесплатный урок React Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.
React Context: лучшие варианты применения
React Context лучше всего подходит для редко изменяющихся глобальных значений: текущей темы, языка пользователя, статуса аутентификации или параметров системы оформления. Такие значения задаются один раз и редко изменяются в течение сеанса.
Этот API встроен в React, не требует зависимостей и ясно сообщает команде: «это значение доступно глобально».
React Context: недостаток повторного рендеринга
Когда объект значения контекста изменяется, даже если изменилось только одно поле, каждый его потребитель рендерится повторно. Это приемлемо для стабильной глобальной конфигурации, но критично для часто меняющегося состояния, например полей формы или флагов анимации интерфейса.
Разделение контекстов на более мелкие части частично решает проблему, но при масштабировании такой подход становится неудобным.
Zustand: лучшие варианты применения
Zustand отлично подходит для глобального состояния приложения, которое изменяется умеренно часто: пользовательских предпочтений, корзины покупок, истории навигации или состояния многошагового мастера. Подписки на основе селекторов предотвращают повторный рендеринг из-за несвязанных частей состояния.
Модель на основе хранилища знакома пользователям Redux и объединяет связанное состояние в одном месте.
API и селекторы Zustand
Хранилища Zustand экспортируют хук useBoundStore. Передайте селектор: useStore(state => state.cart), чтобы подписаться только на срез корзины. Компоненты с разными селекторами независимы: компонент с селектором корзины не рендерится повторно при изменении имени пользователя.
Это обеспечивает Zustand эффективность на уровне отдельных срезов, сравнимую с Jotai, но с более императивным API.
Jotai: лучшие варианты применения
Jotai идеально подходит для мелкозернистого реактивного состояния, в котором часто изменяются многочисленные небольшие независимые значения: отдельные значения полей формы, флаги выбора строк, состояния переключателей интерфейса или подписки на данные в реальном времени.
Модель «отдельный атом для каждого значения» естественна, когда разным частям дерева компонентов нужны совершенно разные срезы состояния.
Сравнение размера сборки и стиля API
Сборка Jotai меньше сборки Zustand, потому что Jotai предоставляет меньше возможностей: в нём нет системы промежуточного ПО и встроенных инструментов разработчика. API Jotai близко напоминает useState: useAtom возвращает [value, setter], что сокращает время обучения разработчиков React.
API Zustand больше похож на Redux: определите хранилище, экспортируйте хук и используйте селекторы. Обе библиотеки обеспечивают отличную поддержку TypeScript.
Поддержка SSR и TypeScript
И Jotai, и Zustand поддерживают серверный рендеринг при использовании подходящих стратегий восстановления состояния. Для SSR Jotai использует Provider с пользовательским хранилищем, а Zustand — createStore для серверных экземпляров.
Обе библиотеки предоставляют полноценные обобщения TypeScript, обеспечивая вывод типов для значений атомов и хранилищ без ручных аннотаций типов.
Сочетание решений для управления состоянием
В реальных приложениях часто сочетают все три решения: React Context для статической конфигурации (базовый URL API, флаги возможностей), Jotai или Zustand для интерактивного состояния клиента и React Query или SWR для данных, полученных с сервера.
Эти уровни не конфликтуют. Намеренное сочетание решений с учётом особенностей каждого среза состояния — рекомендуемая архитектурная практика.
Выбор с учётом знакомства команды
Если у вашей команды есть опыт работы с Redux, модель хранилища Zustand покажется естественной. Если ваша команда тесно связана с React, API Jotai, похожий на useState, обеспечит наиболее плавное обучение.
Для большинства приложений знакомство команды важнее небольших различий в производительности.
Выбор с учётом сложности состояния
Для простого состояния страницы с несколькими переключателями достаточно useState или контекста. Для состояния между компонентами в приложении среднего размера подойдут Zustand или Jotai. Для высокоинтерактивного интерфейса с десятками независимых реактивных значений особенно хорошо подходит Jotai.
Для сложных данных сервера с кэшированием, фоновым обновлением и оптимистическими изменениями объедините любую библиотеку состояния клиента с React Query.
Итоги выбора
Используйте контекст для статических или редко изменяющихся глобальных значений. Используйте Zustand для централизованного состояния приложения с умеренной частотой обновлений. Используйте Jotai для мелкозернистого реактивного состояния на уровне отдельных атомов с множеством независимых подписок. Для состояния сервера используйте React Query или SWR.
Эти категории не исключают друг друга: разделение их по типам состояния обеспечивает чистую и производительную архитектуру.
Когда использовать Jotai, а когда контекст
Когда Jotai лучше React Context подходит для управления состоянием?
Итоги урока
React Context лучше всего подходит для статической глобальной конфигурации; Zustand — для централизованного состояния приложения с подписками на основе селекторов; Jotai — для мелкозернистого атомарного состояния, в котором множество независимых значений часто обновляется. Все три хорошо дополняют библиотеки для работы с состоянием сервера, такие как React Query.
Выбирайте решение с учётом частоты обновлений, сложности состояния и знакомства команды с технологией. Использование всех трёх библиотек для разных категорий состояния — допустимый и распространённый подход в промышленной разработке.
Изучай React с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 88
- Уроки
- 324
Часто задаваемые вопросы
Урок «Jotai, Zustand и Context: что и когда использовать» бесплатный?
Да — полный текст урока «Jotai, Zustand и Context: что и когда использовать» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.
Чему я научусь в уроке «Jotai, Zustand и Context: что и когда использовать»?
Сравнивайте атомарную модель Jotai с хранилищем Zustand и React Context, чтобы выбрать подходящий инструмент для каждой задачи Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать React Academy?
Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Jotai, Zustand и Context: что и когда использовать»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке React Academy?
Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Атомы: единица состояния в Jotai
- Чтение и запись атомов с помощью useAtom
- Производные и асинхронные атомы
- Jotai, Zustand и Context: что и когда использовать