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

为什么React中fetch请求URL读取的state值没有更新?

问题原因

React 类组件的 setState 为异步批量更新方法,调用后不会立刻修改当前作用域下的 this.state,因此你在 setState 后直接读取 this.state.data 拼接请求链接时,拿到的仍是更新前的初始值。


解决方案

方案1:直接使用已有的输入值

你需要赋值给 data 的搜索关键词本身已经实时存在于 this.state.instant_data 中,直接用该值拼接请求链接即可,无需等待 state.data 更新:

searchNews = async (e) => {
    e.preventDefault();
    const searchKeyword = this.state.instant_data
    this.setState({
      data: searchKeyword,
    });
    const link = `https://newsapi.org/v2/everything?q=${searchKeyword}&apiKey=API_KEY`;
    const raw_data = await fetch(link);
    const data = await raw_data.json();
    console.log(data);
};

方案2:将请求逻辑放入setState的回调中

setState 支持传入第二个参数作为回调函数,该函数会在state完全更新后才执行,此时读取的 this.state 就是最新值:

searchNews = async (e) => {
    e.preventDefault();
    this.setState({
      data: this.state.instant_data,
    }, async () => {
      // 回调内读取的state已经完成更新
      const link = `https://newsapi.org/v2/everything?q=${this.state.data}&apiKey=API_KEY`;
      const raw_data = await fetch(link);
      const data = await raw_data.json();
      console.log(data);
    });
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:06:03