Эффект отправляет запрос бесконечно
function UsersPage({ role }) {
const [users, setUsers] = useState([]);
const filters = { role, onlyActive: true };
useEffect(() => {
fetchUsers(filters).then(setUsers);
}, [filters]);
// ...
}
В панели сети видно, что запросы к списку пользователей уходят непрерывно, пока открыта страница. Почему?
- Объект фильтров создаётся заново каждый рендер; зависимости сравниваются по ссылке, эффект стреляет снова — и цикл замыкается.
- Запрос не отменяется при размонтировании, и React самостоятельно повторяет незавершённые эффекты до получения стабильного ответа.
- Нужно передать пустой массив зависимостей: объекты в зависимостях недопустимы в принципе.
- Причина в передаче функции обновления состояния по ссылке — из-за этого эффект перезапускается.
