开发者问题收集

我该如何映射这些数据?错误提示“无法读取未定义的属性‘map’”

2021-08-20
357

我一直有这个错误:

Uncaught TypeError: Cannot read property 'map' of undefined

我正在使用 useEffect 从 firestore 检索数据

const [users, setUsers] = useState();

  useEffect(() => {
    const unsubscribe = firestore
      .collection("users")
      .doc(result)
      .onSnapshot((snapshot) => {
        const arr = [];
        arr.push({
          ...snapshot.data(),
        });

        setUsers(arr);
        console.log(JSON.stringify(arr));
      });

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

数据的 JSON.strinify 结果:

[
  {
    email: "[email protected]",
    createdDate: { seconds: 1629266050, nanoseconds: 525000000 },
    displayName: null,
  },
];

这是我的功能组件内部,我一直有错误说无法读取 map 的属性

{users.map((user) => (
          <li>{user.email}</li>
        ))}
3个回答

首先,检查用户数据是否已获取并存储在状态中

{users && users.map((user) => (
          <li>{user.email}</li>
        ))}
Yashwant
2021-08-20

缺少初始状态,因此它将其视为未定义。因此,它尝试映射未定义。

像这样添加初始状态 const [users, setUsers] = useState([]);

dj21496
2021-08-20

首先用空数组初始化状态。最初状态为空,因此映射未定义

const [users, setUsers] = useState([]);

然后执行如下所示的条件检查以确保安全。

{
users?.map((user) => <li>{user.email}</li>)
}

这 ? 检查值是否未定义。

参考 - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining

moshfiqrony
2021-08-20