Почему 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 хорош для редких обновлений и внедрения зависимостей, но не имеет селекторов. Для частых изменений берут сторы с подпиской на нужный кусок.