Выбор ответа Middle Context и стейт-менеджеры спрашивают часто обновлено

Кого перерисует смена value в Context

Вопрос

Значение провайдера контекста изменилось. Какие компоненты React перерисует из-за этого изменения?

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

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

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

Коротко

Правильный ответ: Всех, кто читает его через useContext или use, даже в memo. Каждый потребитель контекста подписан на всё значение целиком.

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

  1. Прямых детей провайдера, а глубже значение дойдёт при их рендере
  2. Всех, кто читает его через useContext или use, даже в memoправильный ответ
  3. Все компоненты внутри провайдера, кроме обёрнутых в React.memo
  4. Потребителей, у которых изменилась используемая часть значения

Разбор

Каждый потребитель контекста подписан на всё значение целиком. Если value изменился по Object.is, React перерисует всех потребителей, и memo это не останавливает: подписка на контекст работает в обход сравнения пропсов.

  • Прямые дети тут ни при чём: ребёнок, который не читает контекст и обёрнут в memo, не перерисуется от смены контекста.
  • Вариант про memo: он защищает от перерисовки из-за пропсов родителя, но не от контекста.
  • Частичной подписки у Context нет: даже если компонент берёт одно поле, он перерисуется при смене любого.

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

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

Термины по теме