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

Почему Context API не подходит для часто меняющегося состояния?

Контекст и State managers

Context при изменении значения перерисовывает все компоненты, которые его используют, независимо от того, какая часть значения им нужна.

В чём проблема

Если в одном контексте лежит объект { user, theme, cart }, то обновление cart заставит перерисоваться компоненты, которым нужен только theme. React не умеет подписываться на часть значения контекста.

Как с этим жить

  • Разделять контексты по смыслу и частоте обновлений.
  • Мемоизировать значение провайдера, чтобы объект не создавался заново на каждый рендер.
  • Выносить редко меняющиеся данные (тема, язык, авторизация) в контекст, а часто меняющиеся в специализированный стор.
  • Использовать библиотеки с селекторами: Zustand, Redux, Jotai.
const value = useMemo(() => ({ user, logout }), [user, logout]);
return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;

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

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

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