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

React报错TypeError: components.map is not a function问题排查求助

问题诊断与修复方案

根本原因

Array.push() 方法的返回值不是修改后的新数组,而是执行push操作后数组的长度(数字类型)。你在Board.js的drop回调中直接把push的返回值传给了setComponents,导致components状态从初始的数组类型变成了数字类型,数字不存在map方法,触发报错。

错误代码定位

Board.js中drop回调的错误写法:

drop: (item) => {
    setComponents(components.push(item));
    console.log(components);
}

这里components.push(item)执行后会修改原数组,所以你打印components的时候会看到新增了元素的数组,但setComponents实际存入状态的是push返回的数字,下一次渲染时components就会变成数字,触发报错。

修复方案

两种合法的更新数组状态的写法:

  • 扩展运算符生成新数组(常规场景适用)
drop: (item) => {
    setComponents([...components, item]);
}
  • 函数式更新(避免闭包陷阱,更稳妥的写法)
drop: (item) => {
    setComponents(prevComponents => [...prevComponents, item]);
}

为什么Category.js调用正常

Category中传入Components组件的category.data本身就是数组类型,没有涉及到错误的状态更新操作,所以map方法可以正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:00:00