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

React函数组件报Cannot read property 'map' of undefined如何解决

报错原因及修复方案

核心错误点(直接导致map报错)

你fetch请求的then链式调用存在语法遗漏:第一个then的回调没有返回res.json()的执行结果,导致第二个then接收到的res为undefined,调用setProjects(undefined)后,原本初始化为空数组的projects被覆盖为undefined,调用map方法自然报错。

修复步骤

1. 修正fetch的链式调用写法

修改projects.component.jsx中useEffect里的fetch逻辑,给第一个then加上return:

useEffect(() => {
    fetch("http://127.0.0.1:8000/api/projects/")
        .then((res) => {
            // 这里必须加return,否则下一个then拿不到解析后的结果
            return res.json();
        })
        .then((res) => {
            setProjects(res);
        })
        .catch(err => console.log(err))
}, []);

你也可以简写为隐式return:

.then((res) => res.json())

2. 增加渲染前的安全校验(可选,避免后续接口异常导致同类报错)

给map调用加可选链操作符,或者提前判断projects是否为数组,防止接口返回非数组类型的异常值时报错:

{projects?.map((project) => (
    <div className="notes" key={project.id}>
        <h1>{ project.title }</h1>
    </div>
))}

也可以搭配加载状态提升用户体验:

// 新增loading状态
const [loading, setLoading] = useState(true);

// fetch的第二个then里加
.then((res) => {
    setProjects(res);
    setLoading(false);
})

// 渲染部分判断
if(loading) return <div>加载中...</div>
return (
    // 原有渲染逻辑
)

3. 额外排查点

如果修正后仍然报错,请确认你接口返回的结果是否直接是项目数组,部分接口会把数据放在嵌套字段里(比如{code:200, data: [...]}),这种情况需要调整setProjects的赋值逻辑为setProjects(res.data)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:54:02