Подписка на часть контекста
Условие
Store в контексте хранит { a, b }. Компонент A читает только поле a и не должен перерисовываться при изменении b. Реализуй хук useSelector(selector) поверх подписки store.subscribe.
Что проверяют тесты
читает выбранное поле
обновляется при изменении своего поля
не перерисовывается при изменении чужого поля
отписывается
Как подойти
Контекст сам по себе перерисовывает всех потребителей при любом изменении value - поэтому поверх него строят подписку с выборкой. Ключевая деталь: возврат prev из функциональной формы сеттера означает «ничего не менялось», и React пропускает рендер. Селектор в ref нужен, потому что его почти всегда передают инлайновой стрелкой. Это упрощённая версия useSyncExternalStoreWithSelector.
Подсказки: 3
- Сравнивай новый результат селектора с прежним и не вызывай setState при совпадении.
- setState с тем же значением React отбросит, если вернуть prev из функциональной формы.
- Селектор держи в ref, иначе инлайновая стрелка перевесит подписку на каждом рендере.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.