在 react-native 中嵌套 firestore onSnapshot 侦听器?

Nesting firestore onSnapshot listeners in react-native?

我正尝试为我的应用做这样的事情:

snapshotListeners() {
  firestore()
    .collectionGroup()
    .where()
    .onSnapshot({
      error: //Handle error
      next: firstSnapshot => {
        firstSnapshot.docsChanges().forEach(change => {
          //Data retrieved and used in the below query to get more data
          firestore()
            .collection()
            .where() //using the data retrived from the above query here.
            .onSnapshot({
              error: //Handle error
              next: secondSnapshot => {
                secondSnapshot.docsChanges().forEach(change =>{
                  //More Data from second query
                })
              }
            })
        })
      }
    })
}

第二个查询依赖于从第一个查询中检索到的数据,我希望监听两个查询在各自文档中的变化。

例如, 群组功能: 这是我的数据库结构:

Groups(top-level collection)
    |_groupId(documents) - Members(subcollection) 
    |_groupId             |     |_uid(document)
                          |     |_uid
                          |
                          |__groupdata(Fields like title, description, etc)

所以我将使用 first listener 来监听成员 sub-collection 中该特定用户的文档的更改,并使用 second listener 来检索组(关于组的数据) 他是实时的,所以当他 added/removed 来自群组时,list/frontend 会像 WhatsApp 一样自动更新。

或者即使更改了组数据,如标题、描述等,这些更改也会在 front-end 中听到并更新。

这种快照侦听器的嵌套是推荐用于此用例还是有其他方法?

非常感谢您的帮助。

像这样嵌套侦听器是很正常的,如果以合理的规模完成,则无需担心。什么是合理的有点主观和依赖,但让我们说:适合移动应用程序中单个屏幕的东西可能是一个合理的上限。

请记住,您需要自己管理侦听器。因此,保留您添加的嵌套侦听器的列表,并且仅在外部侦听器触发时添加新的(并删除过时的)。

如果您想要进一步扩展,可以将每个成员(嵌套文档)的相关数据复制到组(父文档)中。

作为第三种选择,您可以仅为特定组的成员创建一个单独的子集合,这样您就可以使用一个快照侦听器来侦听所有这些成员。