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

React中如何通过点击不同分类使用Axios发起API请求?

问题分析与解决方案

问题描述

点击分类列表项(<li>)时触发API调用,但控制台仅输出null,无法加载对应分类的内容。

核心问题

<li>不是表单控件,它的value属性不会被浏览器识别为可通过e.target.value获取的有效值,导致点击时setCategory设置的是undefined或无效值,最终API请求的URL不正确,返回null。

修复方案

方案1:直接在点击事件中传递分类值

修改点击事件处理函数,直接传入目标分类字符串,避免依赖e.target.value:

const [category, setCategory] = useState("");

useEffect(() => {
  // 初始空值时不发起请求
  if (!category) return;
  
  axios
    .get(`${url}${category}`)
    .then((response: any) => {
      console.log(response.data.meals);
    })
    .catch((error: any) => {
      console.log(error);
    });
}, [category]);

// 直接接收分类参数
const onClickHandler = (selectedCategory: string) => {
  setCategory(selectedCategory);
};

对应的<li>写法:

<li onClick={() => onClickHandler("Seafood")}>
  Seafood
</li>

方案2:使用自定义data-*属性

利用HTML自定义数据属性存储分类值,在事件处理中通过dataset获取:

const onClickHandler = (e: any) => {
  // 通过dataset获取自定义属性值
  const selectedCategory = e.target.dataset.value;
  setCategory(selectedCategory);
};

对应的<li>写法:

<li data-value="Seafood" onClick={onClickHandler}>
  Seafood
</li>

额外优化

在useEffect中增加空值判断,避免初始状态(category为空字符串)时发起无效请求,减少不必要的API调用。

内容的提问来源于stack exchange,提问作者Erikas Venskus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:07:07