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

React中点击按钮触发Axios GET请求的实现方法

实现方案

核心思路是把API请求逻辑封装为可复用的独立函数,同时供组件首次加载和按钮点击两个场景调用,具体修改如下:

第一步:修改App组件代码

你需要把原来写在useEffect里的请求逻辑抽离成单独的函数,再把这个函数作为handleClick属性传递给子组件:

import axios from "axios";
import React,{useState, useEffect, useCallback} from 'react';
import ReactDOM from 'react-dom';
import '../node_modules/bootstrap/dist/css/bootstrap.min.css';

// 先定义你的API地址,这里替换成你实际的接口地址
const baseURL = "你的随机名言接口地址";

export default function App(){
  const [randomQuote,setRandomQuote] = useState('');

  // 封装独立的请求函数,用useCallback缓存避免不必要的重渲染
  const fetchRandomQuote = useCallback(() => {
    axios.get(baseURL)
      .then((res)=> {
        setRandomQuote(res.data);
      })
      .catch(err => {
        // 可以在这里加错误处理逻辑
        console.error("请求名言失败:", err);
      });
  }, [])

  // 组件首次挂载时调用请求函数
  useEffect(
   () => {
      fetchRandomQuote();
    }, [fetchRandomQuote]
  );

  if (!randomQuote) return null;

  return (
    <div>
      <QuoteCard 
        quote={randomQuote.content} 
        author={randomQuote.author}
        handleClick={fetchRandomQuote} // 把请求函数传递给子组件
      />
    </div>
  )
}

第二步:子组件无需修改

你现有的QuoteCard组件已经正确绑定了onClick={props.handleClick},点击Generate按钮就会自动触发父组件传递的请求函数,拉取新的随机名言并更新状态。

可选优化

如果需要避免用户快速重复点击发起多次请求,可以加一个加载状态控制:

// 在App组件里新增加载状态
const [loading, setLoading] = useState(false);

const fetchRandomQuote = useCallback(() => {
  if (loading) return; // 加载中直接拦截
  setLoading(true);
  axios.get(baseURL)
    .then((res)=> {
      setRandomQuote(res.data);
    })
    .catch(err => {
      console.error("请求名言失败:", err);
    })
    .finally(() => {
      setLoading(false); // 请求完成不管成功失败都重置加载状态
    })
}, [loading])

你可以把loading状态传给子组件,控制按钮的禁用状态或者显示加载动画。


内容的提问来源于stack exchange,提问作者Esam Olwan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:15:03