首页 > 解决方案 > Firebase/Firestore 未正确刷新数据

问题描述

我正在使用 react-native/expo 开发一个应用程序,并尝试从 Firestore 获取数据。

在我的数据库结构中,我有一个名为“用户”的集合。该集合包含用户文档。每个用户都有一个子集合“userEvents”,其中包含对他们订阅的事件的引用

我能够从集合中获取数据,但如果发生一些变化,我的屏幕刷新不正确。

我通过以下方式获取数据:

onCollectionUpdate(uid){
this.setState({events: '', isLoading: true})
  let userCollection = firebase.firestore().collection("users").doc(uid).collection("uEvents");
  userCollection.onSnapshot(snapshot =>{   
    Promise.all(
      snapshot.docs.map(snap =>{
        return new Promise((resolve, reject)=>{
          const data = snap.data()
          const visited = data.visited

          data.eventRef.onSnapshot(doc =>{
            let eventData = doc.data()
            let object ={
              id: doc.id,
              visited: visited,
              title: eventData.title,
              picture: eventData.picture,
              password: eventData.password,
              eventCode: eventData.eventCode,
              description: eventData.description
            }
            resolve(object)
          })
        })
      })
    ).then(data =>{
      this.setState({events: data, isLoading: false})
    }).catch(error =>{
      console.log(error)
    })
})
}

并使用以下方法调用该函数:

    this.unsubscribe = this.onCollectionUpdate(this.state.currentUser.uid)

当我从 uEvent 集合中删除一个事件时,最后一个项目总是消失,直到我重新打开应用程序。如果我添加一个新事件,最后一个项目总是显示两次。

如果有人可以帮助我或给我一个提示,那就太好了

标签: firebasereact-nativegoogle-cloud-firestoreexpo

解决方案


推荐阅读