0Pricing
React Academy · Урок

Атомы: единица состояния в Jotai

Создавайте примитивные атомы с помощью atom() и узнайте, чем архитектура Jotai без провайдера отличается от Context

«Атомы: единица состояния в Jotai» — бесплатный урок React Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.

Что такое атом

В Jotai состояние разделено на атомы — небольшие независимые части реактивного состояния. Каждый атом хранит одно значение и создаётся вне компонентов с помощью atom(initialValue).

Это соответствует ментальной модели разделения состояния на минимальные осмысленные единицы вместо одного большого объекта хранилища.

Атомы реактивны

Когда значение атома изменяется, повторно отрисовываются только компоненты, подписанные на этот конкретный атом. Компоненты, читающие другие атомы, не затрагиваются.

Такая мелкозернистая реактивность — главное преимущество Jotai перед React Context, который повторно отрисовывает всех потребителей при любом изменении.

Создание атомов вне компонентов

Определяйте атомы на уровне модуля: const countAtom = atom(0). Это обеспечивает стабильность идентификатора атома между отрисовками и не позволяет создавать атом заново при каждом монтировании компонента.

Атомы — это лёгкие ссылки; они не хранят собственное значение. Значение находится в хранилище Jotai.

По умолчанию провайдер не требуется

По умолчанию Jotai использует неявное глобальное хранилище. Чтобы начать использовать атомы, не нужно оборачивать приложение в провайдер, что упрощает внедрение в существующие проекты.

Атомы доступны из любого компонента в дереве без явной передачи свойств через компоненты или протягивания контекста.

Явный провайдер для изолированного состояния

Если требуется несколько независимых экземпляров одного дерева компонентов — например, две отдельные формы с собственными атомами состояния формы, — оберните каждый экземпляр в провайдер Jotai. Каждый провайдер создаёт изолированное хранилище.

Это полезно для архитектур микрофронтендов или сложных макетов страниц с независимыми областями состояния.

Глобальное и изолированное хранилища

Глобальное хранилище сохраняет атомы в течение всего времени жизни приложения. Хранилище провайдера с ограниченной областью действия сбрасывается при размонтировании провайдера, что идеально подходит для модальных окон или состояния уровня страницы, которое не должно сохраняться глобально.

Можно даже передать в провайдер пользовательский экземпляр хранилища, чтобы изолировать серверную отрисовку.

Сравнение Jotai и Zustand

Zustand использует один объект хранилища с селекторами, предотвращающими ненужные повторные отрисовки. Jotai разделяет состояние на атомы, и каждый компонент подписывается только на читаемые им атомы.

Jotai лучше подходит для детализированного состояния интерфейса — отдельных значений полей ввода и переключателей. Zustand хорошо подходит для более крупного взаимосвязанного состояния приложения.

Сравнение Jotai и React Context

React Context повторно отрисовывает каждый компонент-потребитель при изменении значения контекста, даже если компонент использует только одно поле объекта контекста.

Jotai решает эту проблему: компонент, использующий useAtom(nameAtom), повторно отрисовывается только при изменении nameAtom, а не при изменении любого другого атома.

Идентичность и равенство атомов

По умолчанию Jotai использует сравнение Object.is, чтобы определить, изменилось ли значение атома. Если присвоить атому то же значение, которое он уже содержит, повторная отрисовка не запускается.

Для сложных объектов используйте утилиту selectAtom, чтобы получить стабильное примитивное значение из большого атома и предотвратить повторные отрисовки при изменении несвязанных полей.

Атомы и useState

useState относится к одному компоненту. Атомы доступны всему дереву компонентов без явной передачи. Когда два соседних компонента читают один и тот же атом, они автоматически остаются синхронизированными.

Это устраняет необходимость поднимать состояние выше для обмена данными между компонентами и одновременно сокращает количество повторных отрисовок.

Практические примеры атомов

Типичные атомы: const themeAtom = atom('light'), const cartItemsAtom = atom([]), const selectedUserIdAtom = atom(null). Они определяются один раз и импортируются в любом месте приложения.

Каждый атом независим: изменение cartItemsAtom не вызывает повторную отрисовку компонентов, которые читают только themeAtom.

Поведение повторного рендеринга: Jotai и Context

Чем Jotai отличается от React Context с точки зрения повторного рендеринга?

Повторение урока

Атомы — фундаментальная единица состояния в Jotai. Они создаются с помощью atom(initialValue) вне компонентов и по умолчанию доступны всему дереву без Provider. При изменении атома повторно рендерятся только его подписчики.

Эта мелкозернистая реактивность — главное преимущество Jotai перед React Context, а модель подписки на отдельные атомы отличается от подхода Zustand с единым хранилищем.

Часто задаваемые вопросы

Урок «Атомы: единица состояния в Jotai» бесплатный?

Да — полный текст урока «Атомы: единица состояния в Jotai» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.

Чему я научусь в уроке «Атомы: единица состояния в Jotai»?

Создавайте примитивные атомы с помощью atom() и узнайте, чем архитектура Jotai без провайдера отличается от Context Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать React Academy?

Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Атомы: единица состояния в Jotai»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке React Academy?

Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Атомы: единица состояния в Jotai
  2. Чтение и запись атомов с помощью useAtom
  3. Производные и асинхронные атомы
  4. Jotai, Zustand и Context: что и когда использовать
← Назад к React Academy