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

React中如何渲染API返回的嵌套对象内数组?解决map函数报错

问题分析与解决方案

首先,咱们来拆解你遇到的错误:TypeError: this.props.colors.map is not a function 本质是因为你传给子组件Color的colors不是数组,而是一个对象。

为什么会这样?

你调用的http://www.colr.org/json/colors/random/2接口返回的数据结构并不是直接的数组,而是一个嵌套了数组的对象,大概长这样:

{
  "colors": [
    {"id": "...", "hex": "..."},
    {"id": "...", "hex": "..."}
  ],
  // 其他额外字段...
}

而你现在的代码里直接把res.data(也就是整个返回对象)赋值给了state.colors,导致this.state.colors是个对象,对象自然没有map方法,所以触发了报错。

解决方法(不需要JSON.parse())

axios已经自动帮你把JSON格式的响应解析成JavaScript对象了,完全不需要手动调用JSON.parse()。你只需要从返回的对象里取出真正的数组字段colors即可:

修改App.js里的componentDidMount方法:

componentDidMount() {
  axios.get('http://www.colr.org/json/colors/random/2')
    // 从res.data中提取嵌套的colors数组
    .then(res => this.setState({ colors: res.data.colors }))
}

这样一来,this.state.colors就变成了真正的数组,子组件Color里的map方法就能正常遍历渲染了。

额外验证小技巧

你可以在then回调里加个console.log(res.data),打印出接口返回的完整结构,确认res.data.colors确实是你需要的数组,这样能更直观地理解数据结构~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:42:34