我想使用React/JavaScript执行多个fetch请求,我有以下几种try :

const fetchAll = async () => {
    Promise.all([
        await fetch('/api/...'),
        await fetch('/api/...')
    ]).then(links => {
        const response1 = links[0];
        const response2 = links[1];

        timeData = response1.json();
        functionData = response2.json();
    })
}

但我想这样做,因为这似乎更有用.如果可能的话,我想使用useffect和useState,并在useState的不同数组中加载不同api的数据.以下是一个示例:

const [data, setData] = useState([]);
useEffect(() => {
        fetch("/api/..")
            .then((response) => response.json())
            .then((r) => {
                setData(r);
            });
    }, []);

是否有一种方法可以对多个请求执行此操作,并将数据保存在不同的数组中,以便我以后可以访问它们?

推荐答案

这可以通过

  1. 创建要解析的URL数组
  2. 迭代返回的数组数据
  3. 将数据传递到setters

例如,在某个模块中创建一些助手函数

// fetch-helpers.js

// performs a request and resolves with JSON
export const fetchJson = async (url, init = {}) => {
  const res = await fetch(url, init);
  if (!res.ok) {
    throw new Error(`${res.status}: ${await res.text()}`);
  }
  return res.json();
};

// get JSON from multiple URLs and pass to setters
export const fetchAndSetAll = async (collection) => {
  // fetch all data first
  const allData = await Promise.all(
    collection.map(({ url, init }) => fetchJson(url, init))
  );

  // iterate setters and pass in data
  collection.forEach(({ setter }, i) => {
    setter(allData[i]);
  });
};

在您的组件中...

import { useEffect, useState } from "react";
import { fetchAndSetAll } from "./fetch-helpers";

export const MyComponent = () => {
  // initialise state to match the API response data types
  const [timeData, setTimeData] = useState([]);
  const [functionData, setFunctionData] = useState([]);

  useEffect(() => {
    fetchAndSetAll([
      {
        url: "/api/...",
        setter: setTimeData,
      },
      {
        url: "/api/...",
        setter: setFunctionData,
      },
    ]).catch(console.error);
  }, []);

  return <>{/* ... */}</>;
};

Javascript相关问答推荐

如何访问Json返回的ASP.NET Core 6中的导航图像属性

如何在Javascript中的控制台上以一行形式打印循环的结果

如何从一个列表中创建一个2列的表?

当作为表达式调用时,如何解析方法decorator 的签名?

在服务器上放置了Create Reaction App Build之后的空白页面

在带有背景图像和圆形的div中添加长方体阴影时的重影线

为什么useState触发具有相同值的呈现

从包含数百行的表中获取更改后的值(以表单形式发送到后端)的正确方法是什么?

如何在文本字段中输入变量?

更改预请求脚本中重用的JSON主体变量- Postman

查询参数未在我的Next.js应用路由接口中定义

第二次更新文本输入字段后,Reaction崩溃

Phaserjs-创建带有层纹理的精灵层以自定义外观

每次重新呈现时调用useState initialValue函数

在Odoo中如何以编程方式在POS中添加产品

我正在试着做一个TicTacToe Ai来和我玩.但是,我试着在第一个方块被点击时出现一个X,然后在第二个方块之后出现一个O

如何修复错误&语法错误:不能在纯react 项目中JEST引发的模块&之外使用导入语句?

如何让SVG图标在被点击和访问后改变 colored颜色 ,并在被访问后取消点击时恢复到原来的 colored颜色 ?

如何将字符串拆分成单词并跟踪每个单词的索引(在原始字符串中)?

鼠标进入,每秒将图像大小减小5%