@Funky_Rhyme

Как рекурсивно принимать json через API?

Нахожусь в процессе изучения React. Есть API, который возвращает JSON файл разбитый на страницы, ссылки на последующие страницы есть в самом JSON.
Я пытаюсь понять как рекурсивно вызывать функцию с последующей конкатенацией (или чем-то подобным), чтобы получить разом все данные. На данный момент получается получить либо первую страницу, либо последнюю.

const [data, setData] = useState([]);

  useEffect(() => {
    const fetchData = async (url : string) => {
      const res = await fetch(url);
      const json = await res.json();
      if(json.pagination.links.next){
        /* Что-то мб тут надо написать */
      }
      setData(json.data);
    };
    fetchData("https://gorest.co.in/public/v1/users");
  }, [data]);
  • Вопрос задан
  • 184 просмотра
Решения вопроса 1
Aetae
@Aetae Куратор тега TypeScript
Тлен
Условно как-то так:
useEffect(() => {
  const fetchData = async (url: string, data: any[] = []) => {
    const res = await fetch(url);
    const json = await res.json();
    if(json.pagination.links.next){
      await fetchData(json.pagination.links.next, data)
    }
    data.push(json.data);
    return data;
  };
  
  fetchData("https://gorest.co.in/public/v1/users").then(setData);
}, [url]);

в data будет массив.

Кстати рекурсия тут не обязательна:
useEffect(() => {
  const fetchData = async (url: string) => {
    let data: any[] = [];

    do {
      const res = await fetch(url);
      const json = await res.json();

      data.push(json.data);

      url = json.pagination.links.next;
    } while (url);

    return data;
  };

  fetchData("https://gorest.co.in/public/v1/users").then(setData);
}, [url]);


Ну и вместо any - расставить твои типы надо.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект