【问题标题】:Nesting firestore onSnapshot listeners in react-native?在 react-native 中嵌套 firestore onSnapshot 监听器?
【发布时间】:2020-01-17 18:43:07
【问题描述】:

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

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 来监听成员子集合中特定用户的文档的更改,并使用second listener 来实时检索他所在的组(关于组的数据),这样当他被添加/从组中删除,列表/前端会像 WhatsApp 一样自动更新。

或者即使组数据发生了变化,如标题、描述等,这些变化也会在前端听到并更新。

对于此用例,是否建议使用这种嵌套的快照侦听器,还是有其他方法?

非常感谢您的帮助。

【问题讨论】:

    标签: javascript firebase react-native google-cloud-firestore react-native-firebase


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢,如果第一个监听器被触发,第二个监听器是否也会自动触发,反之亦然?您能否详细解释一下您的第三种选择,我想这就是我所做的,为每个组创建了一个成员子集合?
    • 我添加了更多关于管理侦听器的内容,您可能认为这涉及到更多。如果你已经创建了一个包含特定成员的子集合,为什么不给整个集合添加一个监听器呢?这要简单得多
    猜你喜欢
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 2022-01-17
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 2018-07-07
    相关资源
    最近更新 更多