小编Ajm*_*had的帖子

如何从 Cloud Firestore 以对象的形式获取查询结果?

我在我的 ReactJS 项目之一中从 firebase 实时数据库迁移到 Cloud firestore。我对 Firestore 还很陌生。

这是我需要的。考虑到我有存储在集合'Items' 中的项目的详细信息。

在实时数据库中,我只需要这样做即可获取数据并将其存储在状态中:

database.ref('Items').once('value', (snapshot) => {
    this.setState({items: snapshot.val()})    
})
Run Code Online (Sandbox Code Playgroud)

snapshot.val()Items中的所有对象作为包含它们的单个对象返回。这使我可以轻松地将它们呈现在表格中Object.keys(this.state.items).map()

据我目前所知:

Firestore 的情况并非如此。Firestore 返回一个对象,该对象只能通过遍历每个子项来检索子项中的数据。

所以我能想到的最好的是:

db.collection('Items').get().then(gotData)
gotData = (snapshot) => {
    snapshot.forEach((item) => {
        const item = {[item.id]: item.data()}
        this.setState(previousState => ({
            items : {...previousState.items, ...item}
        }))
    })
}
Run Code Online (Sandbox Code Playgroud)

上述解决方案的问题在于,状态将被更新的次数等于集合中的项目数。所以我想知道是否有更好的方法来做到这一点。

javascript firebase reactjs google-cloud-firestore

1
推荐指数
1
解决办法
4725
查看次数