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

React中映射API返回对象键值到列表遇map报错,求解决方案

解决React映射API数据的错误并实现预期渲染

错误原因分析

Uncaught TypeError: _stream$results.map is not a function 说明你调用map的stream?.results不是数组类型。大概率是API返回的results是对象结构(而非数组),或者数据还未加载完成时results为undefined/null。

解决方案与代码实现

1. 先处理数据类型判断与转换

如果API返回的stream.results是对象(键为国家代码,值为对应内容),需要先用Object.entries将其转换为键值对数组,再进行遍历。同时要添加数据加载状态判断,避免空值报错。

2. 完整React组件示例

import React from 'react';

const StreamProviders = ({ stream }) => {
  // 处理数据:如果results是对象则转为数组,否则默认空数组
  const resultsArray = stream?.results 
    ? (Array.isArray(stream.results) 
      ? stream.results 
      : Object.entries(stream.results))
    : [];

  if (resultsArray.length === 0) {
    return <div>No streaming data available</div>;
  }

  return (
    <div className="stream-providers">
      {resultsArray.map(([countryCode, countryData], countryIndex) => {
        // 提取购买和租赁的供应商列表
        const buyProviders = countryData.buy || [];
        const rentProviders = countryData.rent || [];

        return (
          <div key={countryCode} className="country-section">
            <h3>Country: {countryCode}</h3>
            
            {/* 渲染购买选项 */}
            {buyProviders.length > 0 && (
              <div className="option-section">
                <h4>Buy:</h4>
                <ul>
                  {buyProviders.map((provider, idx) => (
                    <li key={idx}>
                      {idx + 1}) Provider name: {provider.provider_name}
                    </li>
                  ))}
                </ul>
              </div>
            )}

            {/* 渲染租赁选项 */}
            {rentProviders.length > 0 && (
              <div className="option-section">
                <h4>Rent:</h4>
                <ul>
                  {rentProviders.map((provider, idx) => (
                    <li key={idx}>
                      {idx + 1}) Provider name: {provider.provider_name}
                    </li>
                  ))}
                </ul>
              </div>
            )}
          </div>
        );
      })}
    </div>
  );
};

export default StreamProviders;

3. 关键说明

  • 数据类型兼容:通过Array.isArray判断stream.results类型,对象则用Object.entries转成[国家代码, 国家数据]的数组结构,确保可以用map遍历。
  • 空值处理:用可选链?.和默认空数组避免数据未加载时的报错,同时添加空状态提示。
  • 结构分层:按照国家→购买/租赁→供应商的层级渲染,匹配你预期的输出格式。

样式优化(可选)

可以添加简单的CSS来匹配预期的缩进效果:

.country-section {
  margin: 1rem 0;
}
.option-section {
  margin-left: 1.5rem;
}
.option-section ul {
  margin-left: 1.5rem;
  list-style: none;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:45:35