мне надо сделать два запроса на сервер. я использую reactjs . ответь с первого запроса надо использовать на втором запросе

import { $authApi } from ".";

export const get_ids = async () => {
  const response = await $authApi.post("", {
    action: "get_ids",
    params: { offset: 10, limit: 3 },
  });
  console.log(response);
  return response;
};

export const get_items = async (ids) => {
  console.log(ids);
  const response = await $authApi.post("", {
    action: "get_items",
    params: { ids: ids },
  });

  console.log(response);
  return response;
};

const App = () => {
  const [products, setProducts] = useState([]);
  const [ids, setIds] = useState([]);

  useEffect(() => {
    get_ids()
      .then((data) => setIds(data.data.result))
      .then(setProducts(ids));
  }, []);
};

Ответы (1 шт):

Автор решения: Armen

что бы вставить код на верху ответов/вопросов есть две кнопки пример кода/фрагмент кода введите сюда описание изображения

также ctrl+K либо наверное cmd+K(на маках) после вставки и видиления участка кода в сообшении

import { useEffect, useState } from "react";
import { $authApi } from ".";
//async/await тут не нужен если не надо логать resonse
export const get_ids = async () => {
  const response = await $authApi.post("", {
    action: "get_ids",
    params: { offset: 10, limit: 3 },
  });
  console.log(response);
  return response;
};
//async/await тут не нужен если не надо логать resonse
export const get_items = async (ids) => {
  console.log(ids);
  const response = await $authApi.post("", {
    action: "get_items",
    params: { ids: ids },
  });

  console.log(response);
  return response;
};

//без async/await
// export const get_items = (ids) => {
//   return $authApi.post("", {
//     action: "get_items",
//     params: { ids: ids },
//   });
// };


const App = () => {
  const [products, setProducts] = useState([]);
  //вроде лишнее
  // const [ids, setIds] = useState([]);

  //async/await
  useEffect(() => {
    const init = async () => {
      try {
        const ids = await get_ids();
        const items = await get_items(ids);

        setProducts(items);
      } catch (err) {
        console.error(err);
      }
    };
    init();
  }, []);

  //promise
  // useEffect(() => {
  //   get_ids()
  //     .then((ids) => get_items(ids))
  //     .then((items) => setProducts(items))
  //     .catch((err) => console.error(err));
  // }, []);

  return <span>111</span>;
};

//более правилная реализация создать кастомный хук(инкапсулировать инициализацию продуктов в хуке)

export const useProducts = () => {
  const [products, setProducts] = useState([]);

  useEffect(() => {
    const init = async () => {
      try {
        const ids = await get_ids();
        const items = await get_items(ids);

        setProducts(items);
      } catch (err) {
        console.error(err);
      }
    };
    init();
  }, []);

  return {
    products,
  };
};

export const App2 = () => {
  const { products } = useProducts();

  return <span>222</span>;
};
→ Ссылка