You need to enable JavaScript to run this app. 调用CoinGecko的global API返回值执行map方法报undefined如何解决
优惠活动
大模型
产品
解决方案
定价
更多

调用CoinGecko的global API返回值执行map方法报undefined如何解决

问题根因
  • CoinGecko的/global接口返回的是单个对象,不是数组,map是仅数组支持的方法,直接调用必然报错。
  • 你对接口返回结构的解构也有问题:和第一个coins markets接口一样,coinGeckoClient.global()返回的结果外层包裹了data字段,你直接从props.nextResult解构global拿到的是undefined,相当于你在调用undefined.map,自然抛出对应错误。
修复步骤
  1. 先明确接口结构:调用https://api.coingecko.com/api/v3/global返回的核心数据都在data字段下,包含markets、active_cryptocurrencies等单值属性,没有需要遍历的数组结构,不需要用map。
  2. 修正组件代码:
export default function Home(props) {
  // 第一个接口的加密货币列表数据保持原有逻辑即可
  const { data: coinsList } = props.result;
  // 正确解构global接口的返回统计数据
  const { data: globalStats } = props.nextResult;

  return (
    <>
      {/* 原有coins列表渲染逻辑省略 */}
      <table className="table2 table-hover table-dark">
        <thead>
          <tr>
            <th>Markets</th>
          </tr>
        </thead>
        <tbody>
          {/* 直接取值渲染,加可选链做兼容避免空值报错 */}
          <tr>
            <td>{globalStats?.markets}</td>
          </tr>
        </tbody>
      </table>
    </>
  )
}

如果确实有遍历global所有统计项的需求,可以先把对象转成数组再遍历:

<tbody>
  {Object.entries(globalStats || {}).map(([statKey, statValue]) => (
    <tr key={statKey}>
      <td>{statKey.replace('_', ' ')}</td>
      <td>{statValue}</td>
    </tr>
  ))}
</tbody>
额外优化建议

可以在getServerSideProps里加异常捕获,避免接口请求失败导致页面直接500:

export async function getServerSideProps(context) {
  const params = {
    order: CoinGecko.ORDER.MARKET_CAP_DESC
  };
  try {
    const [result, nextResult] = await Promise.all([
      coinGeckoClient.coins.markets({params}), 
      coinGeckoClient.global()
    ]);
    return {
      props: {
        result, nextResult
      },
    }
  } catch (e) {
    return {
      props: {
        result: {data: []},
        nextResult: {data: {}}
      }
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 07:06:04