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

NextJS 13.3.0遍历tasks数组报错:tasks.map不是函数

问题解决:tasks.map is not a function 报错

核心原因

你的TodoList组件接收参数时犯了一个常见错误:React组件的第一个参数是整个props对象,而非直接传入的某个属性。当前代码里的(tasks)其实是完整的props对象,不是你期望的ITask[]类型数组,所以调用tasks.map会报错——对象不存在map方法。

控制台打印的tasks实际是{ tasks: [你的任务数组] }的嵌套结构,只是你可能没注意到这层包裹关系。

修复方案

有两种简单的修复方式:

方式1:解构props,直接取出tasks属性

修改TodoList.tsx的组件定义:

import { ITask } from "../types"

interface TodoListProps {
    tasks : ITask[]
}

// 用解构语法从props中提取tasks数组
const TodoList : React.FC<TodoListProps> = ({ tasks }) => {
    console.log(tasks); // 现在打印的是真正的任务数组
  return (
    <div className="overflow-x-auto">
  <table className="table w-full">
    {/* head */}
    <thead>
      <tr>
        <th>Name</th>
        <th>Favorite Color</th>
      </tr>
    </thead>
    <tbody>
    {/* 正常调用map方法 */}
    {tasks.map((task : ITask)=>(
      <tr key={task.id} >
        <td>{task.text}</td>
        <td>Blue</td>
      </tr>
    ))}
    </tbody>
  </table>
</div>
  )
}

export default TodoList; // 补充导出语句,原代码遗漏了这部分

方式2:保留props参数,通过props.tasks访问数组

如果不想使用解构,也可以直接通过props对象访问目标属性:

import { ITask } from "../types"

interface TodoListProps {
    tasks : ITask[]
}

const TodoList : React.FC<TodoListProps> = (props) => {
    console.log(props.tasks);
  return (
    <div className="overflow-x-auto">
  <table className="table w-full">
    {/* ... 头部代码不变 */}
    <tbody>
    {props.tasks.map((task : ITask)=>(
      <tr key={task.id} >
        <td>{task.text}</td>
        <td>Blue</td>
      </tr>
    ))}
    </tbody>
  </table>
</div>
  )
}

export default TodoList;

额外注意

原TodoList.tsx代码遗漏了组件导出语句,必须加上export default TodoList;,否则page.tsx无法正确导入使用该组件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:35:19