Объект в зависимостях эффекта
Условие
Эффект вызывает load(params) при изменении параметров. Сейчас он срабатывает на каждый рендер, потому что params приходит новым объектом. Почини, не меняя сигнатуру компонента.
Что проверяют тесты
загружает при монтировании
не перезапускается без изменений
перезапускается при изменении параметра
Как подойти
Самая частая причина бесконечных или лишних эффектов: объект или массив, созданный в теле компонента, на каждом рендере новый по ссылке. Два решения. useMemo по примитивным зависимостям - когда объект нужен как целое. Разложить на примитивы в массиве зависимостей - проще и надёжнее, когда объект нужен только внутри эффекта. Третий вариант, хранить в ref, скрывает проблему и ломает реакцию на изменения.
Подсказки: 3
- Массив зависимостей сравнивается по Object.is - объектный литерал всегда новый.
- Мемоизируй объект по его настоящим зависимостям.
- Альтернатива - вообще не создавать объект и положить в зависимости примитивы.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.