Реализуй универсальный React-хук useFetch для GET-запросов. Продумай удобный API хука, возвращаемые data/loading/error, обработку HTTP-ошибок и повторное получение данных при изменении URL.

Хук может принимать URL, возвращать data/loading/error и отменять либо игнорировать предыдущую операцию при изменении адреса.

Короткий ответ

Что ответить на собеседовании

Хук может принимать URL, возвращать data/loading/error и отменять либо игнорировать предыдущую операцию при изменении адреса.

Подробный разбор

Ответ с пояснениями

Хук может принимать URL, возвращать data/loading/error и отменять либо игнорировать предыдущую операцию при изменении адреса.

Ниже контракт для JSON GET: URL — строка либо null для отключения запроса; кэширование и ручной refetch не включены.

function useFetch(url) {
  const [state, setState] = useState({ url: null, data: null, loading: false, error: null });
  useEffect(() => {
    if (!url) {
      setState({ url, data: null, loading: false, error: null });
      return;
    }
    let active = true;
    const controller = new AbortController();
    setState({ url, data: null, loading: true, error: null });
    async function load() {
      try {
        const response = await fetch(url, { signal: controller.signal });
        if (!response.ok) throw new Error(`HTTP ${response.status}`);
        const data = await response.json();
        if (active) setState({ url, data, loading: false, error: null });
      } catch (error) {
        if (active) setState({ url, data: null, loading: false, error });
      }
    }
    void load();
    return () => { active = false; controller.abort(); };
  }, [url]);
  if (state.url !== url) return { data: null, loading: Boolean(url), error: null };
  return { data: state.data, loading: state.loading, error: state.error };
}

useState/useEffect импортируют из React. Проверка URL скрывает старые данные ещё до нового эффекта. Структуру JSON дополнительно валидируют под конкретный API; пустой 204-ответ требует отдельного контракта.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее