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

如何获取Firestore文档内的doses数组并解决map is not a function报错

错误原因

  1. 在users.map遍历的回调函数内部,错误使用外层的users数组获取doses属性。users是存储所有用户数据的数组,本身不存在doses字段,doses属于遍历到的单个user对象的属性,undefined调用map方法自然会抛出is not a function的错误。
  2. 缺少对doses字段的类型校验,Firestore中该字段为空或者类型异常时也会触发同类报错。
  3. JSX结构不符合语法规范,单条map回调返回了多个根节点,且未添加遍历项的key属性。

修正后代码

遍历代码调整(原有数据获取逻辑不变)

{users && users.map((user) => (
  <>
    <li>{user.email}</li>
    {/* 从当前遍历的单个user对象取doses,先校验是数组再遍历 */}
    {Array.isArray(user.doses) && user.doses.map((doseItem, index) => (
      <li key={index}>{doseItem.selectedVaccine}</li>
    ))}
  </>
))}

可选优化方案

你当前查询的是单个用户文档,无需将数据包裹为数组存储,可直接存储用户对象简化逻辑:

数据获取代码调整

useEffect(() => {
  const unsubscribe = firestore
    .collection("users")
    .doc(scanResult)
    .onSnapshot((snapshot) => {
      setUser(snapshot.data());
    });

  return () => unsubscribe();
}, []);

对应遍历代码

{user && (
  <>
    <li>{user.email}</li>
    {Array.isArray(user.doses) && user.doses.map((doseItem, index) => (
      <li key={index}>{doseItem.selectedVaccine}</li>
    ))}
  </>
)}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:06:03