PassFront
  1. PassFront
  2. База знаний
  3. Контекст и State managers

Какие есть альтернативы React контекста и в каких случаях их выбирать?

Контекст и State managers

Контекст хорош для редких обновлений; когда его минусы (перерендер всех потребителей, отсутствие селекторов) мешают, выбирают одну из альтернатив.

Композиция вместо контекста

Часто prop drilling убирается не контекстом, а перестройкой дерева: собрать содержимое там, где данные есть, и передать через children/слоты.

<Layout sidebar={<Menu user={user} />} />  // промежуточные уровни не знают о user

Выбирать: когда данные нужны в одном-двух местах, а мешает только транзитная передача. Нулевая цена, никакой инфраструктуры.

Стейт-менеджер с селекторами (Zustand, Redux Toolkit, Jotai)

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

Выбирать: состояние общее для многих несвязанных частей и часто меняется (корзина, редактор, realtime). Даёт точечные ререндеры, централизованную логику, девтулзы. Цена — зависимость и инфраструктура.

Серверный кеш (TanStack Query / SWR)

Выбирать для всего, что приходит с сервера: данные шарятся через кеш по ключу (дедупликация, фоновое обновление), а не через контекст/стор.

Точечная подписка вручную: useSyncExternalStore

Свой маленький стор + подписка — когда не хочется зависимости, а контекст «будит всех». Так внутри устроены Zustand и react-redux.

Разделение контекстов (митигация, а не альтернатива)

Разбить один Provider на несколько (данные/действия, быстрые/медленные), мемоизировать value. Часто этого достаточно, чтобы контекст остался пригодным.

Как выбирать

Транзитная передача → композиция. Редкие глобалки (тема, юзер, локаль) → Context. Частые обновления и много потребителей → стор с селекторами. Данные сервера → React Query.

Коротко для собеседования

Альтернативы: композиция/слоты (убирает саму причину prop drilling), стейт-менеджер с селекторами для часто меняющегося общего состояния, React Query для серверных данных, useSyncExternalStore для своих сторов. Плюс митигация — разделение контекстов и мемоизация value.

Другие вопросы раздела