尝试从 Firestore 数据库中提取多个项目时出现 React 错误

React error when trying to pull multiple items from Firestore database

提问人:Denim Behn 提问时间:9/29/2023 最后编辑:Frank van PuffelenDenim Behn 更新时间:9/29/2023 访问量:25

问:

我正在制作一个 React 应用程序,它连接到 Firebase 的 Firestore 来存储和检索一些数据。

这是我尝试提取信息的方式:

import { useEffect, useState } from "react";
import { db } from "../config/firebase";
import { getDocs, collection } from "firebase/firestore";

export default function Bookings() {
    const [bookingsList, setBookingsList] = useState([]);

    const bookingsCollection = collection(db, "bookings");

    useEffect(() => {
        const getBookingsList = async() => {
            try {
                const data = await getDocs(bookingsCollection);
                const filteredData = data.docs.map((doc) => ({
                    ...doc.data(), 
                    id: doc.id
                }));
                setBookingsList(filteredData);
            } catch(e) {
                console.error("Error with fetching the bookings: " + e);
            }
        };
        getBookingsList();
    }, [])

    return (
        <div>
            <h1>Bookings page</h1>
            {bookingsList.map((booking) => (
                <div>
                    <h4>Listing: {booking.listing}</h4>
                    <h4>Check In: {booking.check_in}</h4>
                </div>
            ))}
        </div>
    );
}

例如,当我尝试提取一条信息时,它就会起作用。但是,当我尝试如上所示提取多条信息时:我收到此错误:<h4>Listing: {booking.listing}</h4><h4>Listing: {booking.listing}</h4><h4>Check In: {booking.check_in}</h4>

对象作为 React 子对象无效(found: object with keys {seconds, nanoseconds})。如果要呈现子项的集合,请改用数组。

我试图尽我所能解决这个问题,但目前我对 React 的了解非常有限,所以我没有成功。通过在线查找,我发现在这些情况下我们需要使用“map()”方法,我已经看到它对其他人有用,但我不太明白为什么它对我不起作用。

JavaScript的 反应JS Firebase 列表 谷歌云火存储

评论

0赞 Jared Rolt 9/29/2023
存储在 中的数据类型是什么?booking.check_in

答:

1赞 Jared Rolt 9/29/2023 #1

正如你提到的,是一个 firebase 时间戳对象,查看文档,该对象上有一个可用的方法,可以将其转换为 JS 对象。然后,有很多方法可以将其转换为字符串,使其成为有效的 React 子项。check_inDate

Date 对象上的 MDN 文档可能是一个开始,但请随意进行自己的谷歌搜索。

至少,应该对你有用。booking.check_in.toDate()