Recoil / Jotai
Тема дорожной карты · React
Recoil и Jotai — это атомарные библиотеки управления состоянием для React, моделирующие состояние приложения как граф мелкозернистых атомов, а не единое монолитное хранилище, что позволяет компонентам подписываться только на те срезы состояния, которые им действительно нужны. Recoil, разработанный Meta, вводит концепции атомов (единиц состояния) и селекторов (производного состояния), тесно интегрированных с конкурентными возможностями React и Suspense. Jotai — минималистичная альтернатива, вдохновлённая Recoil, поставляющаяся с меньшим объёмом бандла — единственная функция atom и хук useAtom, — что упрощает постепенное внедрение в любой React или Next.js фронтенд. Обе библиотеки ориентированы на TypeScript в первую очередь: они автоматически выводят типы атомов и устраняют шаблонный код редьюсеров или создателей действий, характерный для управления состоянием в стиле Redux. Для React-приложений, где состояния на уровне компонентов недостаточно, но полный Redux Toolkit кажется избыточным, Recoil и Jotai предлагают лёгкий и эргономичный путь к масштабируемому управлению состоянием.
Как это работает
Recoil / Jotai в React выходит за пределы useState + Context, когда app-state большой, выводимый в нескольких местах или требует middleware (логирование, persistence, undo). Zustand — самая маленькая API-поверхность (один store, селекторы, без бойлерплейта). Redux Toolkit — официальный преемник Redux: предсказуемые reducers, devtools, RTK Query для данных. Jotai/Recoil моделируют state как атомы — у каждого своя подписка, ререндеры гранулярны.
Когда применять
Берите Zustand для новых проектов, если нет Redux-экспертизы или потребности в RTK Query — самый простой путь. Redux Toolkit — когда команда знает Redux или нужна экосистема devtools/middleware. Jotai/Recoil — когда state по природе атомарный (много независимых маленьких кусков). Оставайтесь на useState + Context, пока не упрётесь в prop drilling или perf-проблемы, оправдывающие библиотеку.
Типичные ошибки
Ловушки Recoil / Jotai: Redux на маленьком приложении (гора бойлерплейта ради slice, помещающегося в useState); server-cache в state-библиотеке вместо TanStack Query (плохо переизобретаете кеш); чрезмерные селекторы и ререндер на любое изменение state; смешивание двух state-библиотек (Redux + Zustand) без чётких границ. Выберите одну и используйте везде.