页面一片空白,控制台报 Cannot read properties of undefined (reading ‘map’)。意思很明确:你在一个 undefined 上调用了 map,问题不在 map,而在数据没到就渲染了。

先定位是哪一行

点开报错堆栈的第一行,找到对应的解构或遍历语句。常见写法是 list.map 或 res.data.list.map,缺省值没给就上了。

三种真实来源

  • 接口还没返回,初始状态是 undefined 而不是空数组
  • 接口返回结构变了,比如多包了一层 data,路径取错
  • 字段本身是 null,后端对空集合返回了 null 而不是 []

写法上先兜住

const list = res?.data?.list ?? [];
return list.map(item => ...);

可选链加空值合并能挡住大部分场景,但不要用它掩盖问题。渲染前加一个加载态,数据没到就显示骨架屏,比事后加问号更可靠。

和后端约定空集合

接口返回空数据时统一给数组,别时而是 null 时而是 [],前端就不用到处写判断。这条约定写进接口文档,能减少一大类线上报错。

最后补一句,出错的那一行不一定是根因,往上翻两层调用,看看数据是在哪一步变成 undefined 的。

上线前给列表渲染加一个空状态,数据为空时显示提示而不是空白区域,用户和排查的人都少走弯路。

作者 9823189