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

React组件从外部API获取数据后无法正常展示的问题求助

问题排查与解决方案

我看了你的代码和问题描述,马上就发现几个关键问题,这就是页面没法渲染carbon.forecast的原因:


1. 没有启用state的更新能力

你现在的useState只解构了状态值carbon,但没有拿到更新它的函数setCarbon——React的state是只读的,必须用对应的更新函数才能修改状态,进而触发组件重新渲染。

2. useEffect缺少依赖数组,会无限重复请求

你的useEffect没有加第二个参数(依赖数组),这会导致组件每次渲染时都重新执行这个副作用,不仅浪费资源,也会干扰状态更新。

3. 获取数据后没有更新state,也没处理API返回的结构

你在控制台打印了数据,但没有把数据存入state;另外看这个API的返回格式,forecast是嵌套在data数组的第一个对象里的,直接用carbon.forecast一开始也拿不到正确的值。


修复后的完整代码

import React, {useState, useEffect} from 'react'
import './Track.css';

export default function Track() {
  // 初始化state为对象,同时拿到更新函数
  const [carbon, setCarbon] = useState({});

  useEffect( () => {
    const headers = {
      'Accept':'application/json'
    };
    fetch('https://api.carbonintensity.org.uk/intensity', {
      method: 'GET',
      headers: headers
    })
    .then(res => res.json())
    .then(body => {
      // 把API返回的第一个数据项存入state
      setCarbon(body.data[0]);
    })
    .catch(err => console.error('请求出错:', err)); // 别忘了加错误处理
  }, []) // 空依赖数组:只在组件挂载时执行一次

  return (
    <div>
      <p>Track</p>
      <div>
        {/* 使用可选链操作符,避免初始状态为{}时的报错 */}
        <p>{carbon?.forecast}</p>
      </div>
    </div>
  )
}

额外说明

  • 用carbon?.forecast是因为组件初始渲染时carbon是空对象,直接访问carbon.forecast会抛出错误,可选链操作符会在carbon为undefined或null时返回undefined,避免报错。
  • 加上catch处理网络请求可能出现的错误,方便排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 13:17:27