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

DRF/NextJS调用分页API报错TypeError: p.map is not a function如何解决

问题原因

DRF 内置分页序列化器的返回结构和未分页接口不同,未分页接口直接返回文章列表数组,分页接口默认返回的是嵌套对象,格式如下:

{
  "count": 总文章数,
  "next": 下一页接口地址(没有下一页则为null),
  "previous": 上一页接口地址(没有上一页则为null),
  "results": [/* 分页后的当前页文章数组 */]
}

你切换分页接口后,前端拿到的p不再是数组而是上述对象,对象本身没有map方法,就会触发p.map is not a function报错。

解决方案

修改getStaticProps内的取值逻辑,从分页返回的对象中提取results字段(也就是实际的文章列表数组)再传给组件即可。如果后续需要做分页跳转功能,也可以把count、next、previous等分页元数据一起返回给前端使用。

修改后的代码示例

仅需要调整getStaticProps部分的逻辑,组件渲染代码不需要改动:

export async function getStaticProps() {
  const res = await fetch("你的分页接口地址");
  const pageData  = await res.json();
  // 提取分页对象内的文章数组赋值给p
  const p = pageData.results;
  
  return{
    props: {
      p
      // 若后续要做分页功能,可同时返回元数据:
      // total: pageData.count,
      // nextPage: pageData.next,
      // prevPage: pageData.previous
    },
  };
};
排查小技巧

遇到接口数据异常时,可以在getStaticProps中打印完整的接口返回值console.log(pageData),查看Next.js服务端的控制台输出,就能明确接口返回的结构,快速定位字段取值错误问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:45:02