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

React调用MovieDB API报错:this.state.movies.map不是函数

解决React中Axios调用MovieDB API时的map is not a function错误

这个错误的核心原因很明确:你尝试在非数组类型的数据上调用map方法,咱们一步步拆解问题并修复:

1. 问题根源:API响应结构理解偏差

MovieDB的搜索API返回的不是直接的电影数组,而是一个包含数组的对象。它的响应结构大概是这样的(简化版):

{
  "page": 10,
  "results": [/* 这里才是你需要的电影数据数组 */],
  "total_pages": 20,
  "total_results": 198
}

你现在的代码里直接把整个响应对象res.data赋值给了movies状态,相当于movies变成了一个对象,而非数组——对象自然没有map方法,所以控制台会抛出那个类型错误。

2. 两步修复代码

第一步:修正Axios回调的状态赋值

把API响应里的results数组取出来赋值给movies,同时加个兜底判断避免空值问题:

axios.get(searchQuery).then(res => {
  // 用|| []确保即使results不存在,movies依然是数组
  this.setState({ movies: res.data.results || [] });
});

第二步:修正渲染时的取值逻辑

你之前写的movie.results.title是错误的——因为map遍历的是results数组里的单个电影对象,直接取movie.title即可:

<ul>
  {this.state.movies.map(movie => (
    <li key={movie.id}>{movie.title}</li>
  ))}
</ul>

3. 额外优化建议

可以给空状态加个提示,提升用户体验:

<ul>
  {this.state.movies.length === 0 ? (
    <li>没有找到相关电影,请尝试其他关键词~</li>
  ) : (
    this.state.movies.map(movie => (
      <li key={movie.id}>{movie.title}</li>
    ))
  )}
</ul>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:58:49