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

React调用NASA API时fetch返回数据仅可遍历一个嵌套对象的原因

React调用NASA API遍历links字段报错原因及修复方案

报错原因

NASA图像搜索API返回的collection.items数组中,所有条目都带有必填的data元数据数组字段,所以可以直接调用data.data.map遍历。但部分非可视化资源条目(如纯元数据记录、音频类资源)不存在同层级的links字段,此时data.links为undefined,不存在map方法,所以调用后会抛出错误。

修复代码

只需要在遍历links字段前增加存在性校验即可,推荐用ES6可选链简化写法,同时注意遍历子项添加唯一key属性、避免变量名重复冲突:

import React from 'react'

const NasaImages = ({ nasaData }) => {
    console.log(nasaData)

    return (
        <div>
            <h2>This is a where the data go. 👇</h2>
            {
                nasaData && nasaData.map((item, idx) => {
                    return (
                        <div key={idx}>
                            <p>{item.href}</p>
                            <div>
                                {/* 新增可选链校验links存在才执行map */}
                                {item.links?.map((linkItem, linkIdx) => {
                                    return <p key={linkIdx}>{linkItem.href}</p>
                                })}
                                {item.data.map((dataItem, dataIdx) => {
                                    return <p key={dataIdx}>{dataItem.description}</p>
                                })}
                            </div>
                        </div>
                    )
                })
            }
        </div>
    )
}

export default NasaImages

如果需要兼容不支持可选链的运行环境,可以替换为传统判断写法:

{item.links && Array.isArray(item.links) && item.links.map((linkItem, linkIdx) => {
  return <p key={linkIdx}>{linkItem.href}</p>
})}

额外优化点

父组件中fetchData方法的finally回调写法存在问题,当前写法会在方法执行时直接触发setLoading(false),而非请求结束后触发,修改为函数包裹即可:

.finally(() => setLoading(false))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:42:02