程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在 React 中使用 fetch() 在一个函数中组合多个 API 请求大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何在 React 中使用 fetch() 在一个函数中组合多个 API 请求?

开发过程中遇到如何在 React 中使用 fetch() 在一个函数中组合多个 API 请求的问题如何解决?下面主要结合日常开发的经验,给出你关于如何在 React 中使用 fetch() 在一个函数中组合多个 API 请求的解决方法建议,希望对你解决如何在 React 中使用 fetch() 在一个函数中组合多个 API 请求有所启发或帮助;

我必须执行 getDataOnegetDataTwo。如何使用 fetch()useStateuseEffect 将以下组合成一个函数?

const MyComponent = () => {
  const [loading,setLoading] = useState(false);
  const [dataOne,setDataOne] = useState<Data[]>([]);
  const [dataTwo,setDataTwo] = useState<Data[]>([]);

  const getDataOne = async () => {
    setLoading(true);
    const result = await fetch(
      "https://my-API-link-one"
    );
    const JsonResult = await result.Json();

    setLoading(false);
    setDataOne(JsonResult);
  };

  const getDataTwo = async () => {
    setLoading(true);
    const result = await fetch(
      "https://my-API-link-two"
    );
    const JsonResult = await result.Json();

    setLoading(false);
    setDataTwo(JsonResult);
  };

  useEffect(() => {
    getDataOne();
    getDataTwo();
  },[]);

更新:

我使用 Promise.all

进行设置
const [loading,setLoading] = useState(false);
   const [dataOne,setDataOne] = useState<DataOne[]>([]);
   const [dataTwo,setDataTwo] = useState<DataTwo[]>([]);
   const [data,setData] = useState<DataOne[] & DataTwo>([]);

    const urls = [
        "https://url-one","https://url-two",];
    
      const getData = async () => {
        setLoading(true);
        const results = await Promise.all(
          urls.map((url) => fetch(url).then((res) => res.Json()))
        );
    
        setLoading(false);
        setData(results);
        console.log(data);
      };

这还没有完全奏效。我现在如何正确使用 useState(并处理来自 url 的两个数据)?最后我想要一个 data 变量,以便我可以映射这个变量:

{data.map((item) => {
          return (
// etc

解决方法

您可以使用 Promise.all。在此处阅读更多信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all。

const getData = () => {
setLoading(true);
Promise.all([fetch('api-1'),fetch('api-2')]).then(results => {
 setDataOne(results[0]);
 setDataTwo(results[1]);
}).finally(() => setLoading(false));
}
,

所以,Promise.all() 接受一个 promise 数组,所以自然而然 Promise.all() 只返回一个数组。因此,即使您的 results 变量仍然是一个数组,我还是建议对其进行解构,因为在这种情况下只涉及两个 API 提取。看看你的更新,我认为只剩下小的修改如下:

    const urls = ["https://url-one","https://url-two",];

    const getData = async () => {
      setLoading(true);
      const [result1,result2] = await Promise.all(
        urls.map((url) => fetch(url).then((res) => res.json()))
     );
      setLoading(false);
      setDataOne(result1);
      setDataTwo(result2);
      console.log(data);
    };
,

利用 .flat()Promise.all() 返回的数据数组重新格式化为保存响应对象/数组的状态,

Promise.all(
    urls.map(url => 
        fetch(url).then(e => e.json())
    )
).then(data => {
    finalResultState = data.flat();
});

大佬总结

以上是大佬教程为你收集整理的如何在 React 中使用 fetch() 在一个函数中组合多个 API 请求全部内容,希望文章能够帮你解决如何在 React 中使用 fetch() 在一个函数中组合多个 API 请求所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。