javascript - 如何同时从多个url获取数据?

标签 javascript reactjs react-hooks

我有一个从 React 中的 url 获取的函数

const DataContextProvider = (props) => {
  const [isLoading, setLoading] = useState(false);
  const [cocktails, setCocktails] = useState([]);

  useEffect(() => {
    const fetchCocktailList = async () => {
      const baseUrl = 'https://www.thecocktaildb.com/api/json/v1/1/';
      setLoading(true);
      try {
        const res = await fetch(`${baseUrl}search.php?s=margarita`);
        const data = await res.json();
        console.log(data);
        setCocktails(data.drinks);
        setLoading(false);
      } catch (err) {
        console.log('Error fetching data');

        setLoading(false);
      }
    };

    fetchCocktailList();
  }, []);


到目前为止我如何映射数据。

const DrinkList = () => {
  const { cocktails } = useContext(DataContext);
  return (
    <div className='drink-list-wrapper'>
      {cocktails.length > 0 &&
        cocktails.map((drink) => {
          return <DrinkItem drink={drink} key={drink.idDrink} />;
        })}
    </div>
  );
};

但是我也想从此网址获取${baseUrl}search.php?s=martini

我想要一种干净的方法来执行此操作并将我的状态设置为两个返回的数据。

最佳答案

首先将数据获取函数基于参数:

const fetchCocktail = async (name) => {
  const baseUrl = 'https://www.thecocktaildb.com/api/json/v1/1/';
  try {
    const res = await fetch(`${baseUrl}search.php?s=` + name);
    const data = await res.json();
    return data.drinks;
  } catch (err) {
    console.log('Error fetching data');
  }
}

然后使用 Promise.all等待所有结果:

setLoading(true);
var promises = [
  fetchCocktail(`margarita`),
  fetchCocktail(`martini`)
];
var results = await Promise.all(promises);
setLoading(false);
DrinkList(results);

其中 results 将是一个数组,其中包含可在 DrinkList 函数上使用的响应。

关于javascript - 如何同时从多个url获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60220297/

相关文章:

javascript - useEffect 的回调的 return 语句什么时候执行?

reactjs - 渲染后的 Om 回调(在更改应用程序状态后聚焦元素)

javascript - AngularJS $scope 对象是什么类型的设计模式?

javascript - 十字图像关闭灯箱

javascript - 使用服务器 props 渲染 React Router 服务器

javascript - 新闻源的 React 架构

javascript - Gatsby 开发命令运行但 gatsby 构建出现错误

javascript - 在 Gatsby : Invalid hook call 中 react Hook

javascript - 为什么在使用 react-table 时使用 `useTable` 而不是 `ReactTable`

javascript - 如果按下后退按钮,如何使用户保持在同一页面?