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

React读取data属性undefined报错是否因useState类型导致

结论先行

这个报错和你为useState设置的类型没有关系。
你看到报错行号对应Title渲染代码块,是编译后的source map行号映射偏移导致的,报错实际触发位置就是fetchWeatherData函数里读取response.data的语句。
出现「终端报错但代码、测试运行正常」的原因是:大部分场景下你的mock接口请求是成功的,页面可以正常渲染;只有偶发请求失败(比如mock服务临时不可用、跨域拦截、请求超时、请求被浏览器插件拦截)时,await axios.get()没有返回正常的response对象,你直接读取undefined的data属性就会抛出这个TypeError,因为你之前没有加错误捕获,异常直接打印到终端,但不影响请求成功场景下的功能运行。

修复方案
  • 给异步请求加try/catch错误捕获,同时增加返回结构的可选链校验,从根源避免读取undefined属性的报错:
const fetchWeatherData = async () => {
  try {
    const response = await axios.get('http://mock-api-call/weather/get-weather');
    // 校验返回结构符合预期再赋值,避免接口返回结构变动导致报错
    if (response?.data?.result?.weather) {
      setWeather(response.data.result.weather);
    }
  } catch (error) {
    // 可按需增加错误提示逻辑,比如告知用户天气加载失败
    console.error('天气数据请求失败:', error);
    setWeather(null);
  }
};
  • 对齐useState的初始值和类型定义,消除类型隐患:
    你当前写的useState<IWeather | null>()没有传入初始值,实际初始值是undefined,和声明的IWeather | null类型不匹配,修改为显式传入null作为初始值即可:
const [weather, setWeather] = useState<IWeather | null>(null);
  • 可选优化:新增loading状态,在请求过程中展示加载提示,提升体验,避免数据返回前页面展示空的天气区块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:57:11