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

Почему Context тормозит

Вопрос

В приложении один AppContext со значением { user, theme, cart, notifications }, где notifications обновляется каждые пару секунд. Что происходит?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: Все потребители AppContext перерисовываются при каждом обновлении. Context не умеет подписку на часть значения: при смене значения провайдера перерисуются все его потребители.

Варианты ответа

  1. Перерисовываются только компоненты, которые читают notifications
  2. Ничего не перерисовывается, пока не вызвать forceUpdate у потребителей
  3. Все потребители AppContext перерисовываются при каждом обновленииправильный ответ
  4. React объединит обновления контекста, и перерисовка будет раз в минуту

Разбор

Context не умеет подписку на часть значения: при смене значения провайдера перерисуются все его потребители. Поэтому часто меняющееся состояние держат в сторе с селекторами (Zustand, Redux) или делят контексты по частоте изменений. forceUpdate тут не нужен. Батчинг объединяет обновления в одном тике, а не за минуту.

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

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