DOM и React Senior Компоненты на практике обновлено

Объект в зависимостях эффекта

Условие

Эффект вызывает load(params) при изменении параметров. Сейчас он срабатывает на каждый рендер, потому что params приходит новым объектом. Почини, не меняя сигнатуру компонента.

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

  • загружает при монтировании

  • не перезапускается без изменений

  • перезапускается при изменении параметра

Как подойти

Самая частая причина бесконечных или лишних эффектов: объект или массив, созданный в теле компонента, на каждом рендере новый по ссылке. Два решения. useMemo по примитивным зависимостям - когда объект нужен как целое. Разложить на примитивы в массиве зависимостей - проще и надёжнее, когда объект нужен только внутри эффекта. Третий вариант, хранить в ref, скрывает проблему и ломает реакцию на изменения.

Подсказки: 3
  1. Массив зависимостей сравнивается по Object.is - объектный литерал всегда новый.
  2. Мемоизируй объект по его настоящим зависимостям.
  3. Альтернатива - вообще не создавать объект и положить в зависимости примитивы.

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

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