Sobes.tech
Назад к вопросам
Middle+
1

// входные параметры: // url // options export function useFetch() { // логика const fetchData = async () => {}; return { data, error, loading }; }

Компании, где спрашивали
Perfluence

Ответ от нейросети

sobes.tech AI

Вот пример реализации кастомного хука useFetch, который принимает URL и опции запроса, и возвращает состояние загрузки, данные и ошибку:

import { useState, useEffect } from 'react';

export function useFetch(url, options) {
  const [data, setData] = useState(null);
  const [error, setError] = useState(null);
  const [loading, setLoading] = useState(false);

  useEffect(() => {
    if (!url) return;

    const controller = new AbortController();
    const signal = controller.signal;

    const fetchData = async () => {
      setLoading(true);
      setError(null);
      try {
        const response = await fetch(url, { ...options, signal });
        if (!response.ok) {
          throw new Error(`Ошибка: ${response.status}`);
        }
        const json = await response.json();
        setData(json);
      } catch (err) {
        if (err.name !== 'AbortError') {
          setError(err.message);
        }
      } finally {
        setLoading(false);
      }
    };

    fetchData();

    return () => {
      controller.abort();
    };
  }, [url, JSON.stringify(options)]);

  return { data, error, loading };
}

Этот хук автоматически запускает запрос при изменении url или options, обрабатывает состояние загрузки, ошибки и данные, а также отменяет запрос при размонтировании компонента или изменении параметров.