Ответ вслух Middle Архитектура состояния обновлено

Context или стейт-менеджер

Вопрос

Чем Context отличается от стейт-менеджера и когда что выбирать?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Context это механизм доставки значения через дерево без пробрасывания пропсов, а состояние в нём всё равно живёт в useState или useReducer провайдера. Проблема в том, что при изменении значения перерисуются все, кто вызывает useContext, и подписаться на кусок нельзя.

Что должно прозвучать в ответе

  • Context передаёт значение вниз, а не управляет состоянием

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

  • Нет селекторов: нельзя подписаться на часть значения

  • Context хорош для редко меняющегося: тема, локаль, пользователь, DI

  • Для частых обновлений стор с селекторами (Zustand, Redux) или разделение контекстов

Что могут спросить следом

  • Как оптимизировать контекст, если стора нет?
  • Что такое useSyncExternalStore?

Разбор

Context это механизм доставки значения через дерево без пробрасывания пропсов, а состояние в нём всё равно живёт в useState или useReducer провайдера. Проблема в том, что при изменении значения перерисуются все, кто вызывает useContext, и подписаться на кусок нельзя. Поэтому Context идеален для того, что меняется редко: тема, локаль, текущий пользователь, зависимости вроде API-клиента. Для часто меняющегося общего состояния беру стор с селекторами, например Zustand: он перерисует только тех, чей кусок изменился. Если стора нет, можно разделить контексты по частоте изменений и мемоизировать значение провайдера.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.