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

如何根据用户输入动态更新useEffect钩子内调用的API请求URL

问题根源

useEffect的第二个参数是依赖数组,你当前传入的是空数组[],这会导致这个副作用只在组件首次挂载时执行一次。后续即使用户输入变化导致finalUrl更新,useEffect也不会重新运行,因此每次拿到的都是首次请求的响应数据。

修复方法

把finalUrl加入useEffect的依赖数组即可,只要finalUrl的值发生变化,就会自动触发重新请求:

const finalUrl =`${apiUrl}id=${id}&timing=${time}&start=${finalStart}&end=${finalEnd}`;
console.log(finalUrl);

useEffect(() => {
    // 可选配置:添加请求取消逻辑,避免快速切换参数时旧请求返回覆盖新数据
    const abortController = new AbortController();

    axios
      .get<AxiosResponse>(finalUrl, {
        headers: {
          "Content-Type": "application/json"
        },
        signal: abortController.signal
      })
      .then(response => {
        setData(response);
      })
      .catch(error => {
        // 跳过请求取消产生的报错
        if (!axios.isCancel(error)) {
          console.log(error);
        }
      });

    // 组件卸载或依赖更新时,取消未完成的请求
    return () => abortController.abort();
}, [finalUrl]); // 此处添加finalUrl作为依赖

console.log(data); 

可选优化

  • 可以新增加载状态、错误状态变量,对应给用户展示请求中、请求失败的提示
  • 如果用户输入更新频率很高,可以添加防抖逻辑,避免短时间内发起大量无效请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:24:04