如何在 React 中使用 Map 函数渲染 Firestore 集合?

How do I render Firestore collection using the Map function in React?

我很难理解如何从 Firestore 集合中呈现数据。到目前为止,这是我正在做的事情: 在 /services/firestoreQueries:

const generateWishlist = (user) => {

    return db.collection('wishlist').where("username", "==", user.uid).get()

}

在我的组件文件中:

const ItemList = () => {
const {currentUser} = useAuth()
const [list, setList] = useState([])

useEffect(() => {
    generateWishlist(currentUser).then((snapshot) => {
        snapshot.docs.forEach((doc) => (

            setList(prevState => ({
                list: [...prevState.list, doc.data()]
            }))

            ))
    })
}, [currentUser])

console.log(list)


return (
    <div>
    <div>
        <h1>This is your wishlist!</h1>
    </div>
    </div>

)
}

我收到 prevState.list 不可迭代错误。

如果我注释掉快照和 console.log(list) 中的代码块,我会按预期获得数据,但是当我尝试映射它时,它说 list.map 不是函数

知道为什么会这样吗?任何帮助,将不胜感激!我花了将近一整天但没有任何进展>.<

console.log当它returns数据

[] ItemList.js:23 
{description: "i am testing", username: "CLmf7rX6I2YQsuAojqsJ3uWGqHD3", price: "10", item: "testing", live: true, …} ItemList.js:23 
{description: "i am testing", username: "CLmf7rX6I2YQsuAojqsJ3uWGqHD3", price: "10", item: "testing", live: true, …} ItemList.js:23

错误不在.map,错误在setList

您已将列表创建为数组

const [list, setList] = useState([])

但是当你设置它时,你正在将它更改为一个对象

setList(prevState => ({
   list: [...prevState.list, doc.data()]
}))

// list => {list: [...]}

使用 setList 作为钩子而不是 this.setState

setList(prev => ([...prev, doc.data()])