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
相关产品推荐
相关产品推荐

