DOM и React Senior Context и стейт-менеджеры обновлено

Подписка на часть контекста

Условие

Store в контексте хранит { a, b }. Компонент A читает только поле a и не должен перерисовываться при изменении b. Реализуй хук useSelector(selector) поверх подписки store.subscribe.

Что проверяют тесты

  • читает выбранное поле

  • обновляется при изменении своего поля

  • не перерисовывается при изменении чужого поля

  • отписывается

Как подойти

Контекст сам по себе перерисовывает всех потребителей при любом изменении value - поэтому поверх него строят подписку с выборкой. Ключевая деталь: возврат prev из функциональной формы сеттера означает «ничего не менялось», и React пропускает рендер. Селектор в ref нужен, потому что его почти всегда передают инлайновой стрелкой. Это упрощённая версия useSyncExternalStoreWithSelector.

Подсказки: 3
  1. Сравнивай новый результат селектора с прежним и не вызывай setState при совпадении.
  2. setState с тем же значением React отбросит, если вернуть prev из функциональной формы.
  3. Селектор держи в ref, иначе инлайновая стрелка перевесит подписку на каждом рендере.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.

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