You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React项目对接CocktailDB API时axios无法发起GET请求问题求助

问题原因与解决方案

核心问题点

  • 请求URL缺少协议前缀:你写的URL = "www.thecocktaildb.com/api/json/v1/1/list.php?c=list"没有带https://,axios会将其识别为相对路径,拼接在你当前React应用的服务域名后,自然请求不到资源;浏览器地址栏直接输入时浏览器会自动补全协议,因此可以正常访问。
  • 未处理axios的异步返回:axios.get()返回的是Promise实例,直接打印无法拿到接口返回的真实数据,需要通过async/await或者.then()方法处理异步结果。
  • 你当前useEffect的依赖数组为空,本身就只会在组件挂载时调用一次API,刚好符合你仅调用一次的需求。

修正后的完整代码

ContextCategories.js

import React, { createContext, useState, useEffect } from 'react';
import axios from 'axios';

// 创建上下文
export const ContextCategories = createContext();

// 创建提供者组件
const CategoriesProvider = (props) => {
  // 上下文状态
  const [categories, setCategories] = useState([]);

  // 调用API,依赖数组为空仅挂载时执行一次
  useEffect(()=>{
    const getCocktailCategories = async () =>{
      try {
        // 补全URL的https协议前缀
        const URL = "https://www.thecocktaildb.com/api/json/v1/1/list.php?c=list";
        const res = await axios.get(URL);
        // 将返回的分类数据存入状态
        setCategories(res.data.drinks);
        console.log(res.data.drinks);
      } catch (err) {
        // 错误捕获,方便排查问题
        console.error('请求分类数据失败:', err);
      }                       
    }
    getCocktailCategories();
  },[]);

  return(                
    <ContextCategories.Provider
      // 将状态传递给消费组件
      value={{
        categories
      }}
    >
      {props.children}
    </ContextCategories.Provider>
  );
};

export default CategoriesProvider;

内容的提问来源于stack exchange,提问作者Valerie Tuckler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:36:07