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

React JS中无法正确遍历Covid19 API返回的countries数组问题

问题分析与解决

你遇到的核心问题是错误地使用了Object.keys()来遍历数组。this.state.countries是一个包含国家对象的数组,而Object.keys()用于提取对象的键名,当传入数组时,它会返回数组的索引字符串(比如"0"、"1"、"2"),这就是你只看到数字索引的原因。

正确的遍历方式

直接对countries数组调用数组原生的map()方法即可,这样每次迭代拿到的就是完整的国家对象,就能访问到Country、TotalConfirmed等字段了。另外别忘了给每个列表项添加唯一的key属性(推荐用每个国家的CountryCode,因为它是唯一的),避免React的性能警告。

修改后的代码片段

把你表格的<tbody>部分替换成下面的代码:

<tbody>
  {this.state.countries.map((country, index) => (
    <tr key={country.CountryCode}>
      <td>{index + 1}</td>
      <td>{country.Country}</td>
      <td>{country.TotalConfirmed}</td>
      <td>{country.TotalDeaths}</td>
      <td>{country.TotalRecovered}</td>
    </tr>
  ))}
</tbody>

额外优化建议

  1. 处理加载状态:你已经定义了isLoading状态,可以在数据未加载完成时显示加载提示:
{this.state.isLoading ? (
  <tr>
    <td colSpan="5" style={{textAlign: 'center'}}>Loading data...</td>
  </tr>
) : (
  // 上面的map遍历代码
)}

记得在componentDidMount里先把isLoading设为true,请求完成后再设为false:

async componentDidMount() {
  this.setState({ isLoading: true });
  try {
    const response = await api.get('/summary');
    this.setState({
      countries: response.data.Countries,
      totalConfirmed: response.data.Global.TotalConfirmed,
      isLoading: false
    });
  } catch (e) {
    this.setState({
      errorMessage: 'Failed to load global data',
      isLoading: false
    });
  }
}
  1. 错误状态提示:如果请求失败,也可以在表格里显示错误信息,提升用户体验。

这样修改后,页面加载时就能正确展示所有国家的疫情数据表格了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 10:47:52