Выбор ответа Middle Context и стейт-менеджеры спрашивают часто обновлено
Кого перерисует смена value в Context
Вопрос
Значение провайдера контекста изменилось. Какие компоненты React перерисует из-за этого изменения?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Всех, кто читает его через useContext или use, даже в memo. Каждый потребитель контекста подписан на всё значение целиком.
Варианты ответа
- Прямых детей провайдера, а глубже значение дойдёт при их рендере
- Всех, кто читает его через
useContextилиuse, даже вmemoправильный ответ - Все компоненты внутри провайдера, кроме обёрнутых в
React.memo - Потребителей, у которых изменилась используемая часть значения
Разбор
Каждый потребитель контекста подписан на всё значение целиком. Если value изменился по Object.is, React перерисует всех потребителей, и memo это не останавливает: подписка на контекст работает в обход сравнения пропсов.
- Прямые дети тут ни при чём: ребёнок, который не читает контекст и обёрнут в
memo, не перерисуется от смены контекста. - Вариант про
memo: он защищает от перерисовки из-за пропсов родителя, но не от контекста. - Частичной подписки у Context нет: даже если компонент берёт одно поле, он перерисуется при смене любого.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Объект-литерал в value провайдера
Следующий вопрос
Зачем делить контекст на данные и действия