【问题标题】:How to use Firebase Firestore's `docChanges` method?如何使用 Firebase Firestore 的 `docChanges` 方法?
【发布时间】:2021-01-22 21:46:45
【问题描述】:

在使用 react-native-firebase 的 react 本机应用程序中的一个操作中,我创建了一个 Firestore 快照侦听器:

听众:

export const onAgendaChange = (uid, role, dispatch) => {
    // query based off role
    let query;
    if (role == 'Receiver') {
        query = 'receiver.uid';
    } else {
        query = 'sender.uid';
    }

    console.log('(actions/agenda) Firestore Read: getAgenda()');

    return firebase
        .firestore()
        .collection('events')
        .where(query, '==', uid)
        .orderBy('date')
        .onSnapshot((querySnapshot) => {
            const agenda = []

            querySnapshot.forEach((doc) => {
                let event = doc.data();
                event.id = doc.id;
                agenda.push(event);

                dispatch({ type: types.LOAD_AGENDA_SUCCESS, payload: agenda });
            });

            querySnapshot.docChanges().forEach(function (change) {
                if (change.type === "added") {
                    console.log("Add heard: ", change.doc.data());
                }
                if (change.type === "modified") {
                    console.log("Modified heard: ", change.doc.data());
                }
                if (change.type === "removed") {
                    console.log("Removed heard: ", change.doc.data());
                }
            });
        });
};

我观察到的一个问题是在初始应用程序加载时,当这个监听器执行时,它返回一个错误:

TypeError:querySnapshot.docChanges 不是函数。 (在 'querySnapshot.docChanges()', 'querySnapshot.docChanges' 是一个 数组实例)

我观察到的下一个问题是,如果重新加载应用程序,则不会生成上述错误,因此如果引用的集合中的文档发生更改,docChanges() 仍然不会记录任何内容。这直接取自 firebase 文档。当在 'where' 或 'orderBy' 上使用 onSnapshot() 时,回调会收到一个 querySnapshot 对象,该对象确实有 docChanges() 作为方法。那么有什么想法吗?

【问题讨论】:

  • 您确定该消息指的是此代码吗?
  • @DougStevenson 如果我删除了docChanges(),没问题
  • docChanges 应该始终是一个函数,而不是一个数组。如果您有一个可重复的示例表明其他情况,那是您可以向 Firebase 支持提交的错误报告。 support.google.com/firebase/contact/support
  • 这是使用 react-native-firebase,你认为这相关吗?
  • 也许吧。不过,这样标记问题。

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


【解决方案1】:

这个问题是由于在使用 react-native-firebase 时过于关注 firebase 文档造成的。

虽然该库确实反映了 95% 的 firebase 文档,但在这种情况下,它没有。

使用 react-native-firebase,docChanges 是一个属性,而不是一个函数,所以你要使用:

querySnapshot.docChanges.forEach(function (change) {
  if (change.type === "added") {
    console.log("Add heard: ", change.doc.data());
  }
  if (change.type === "modified") {
    console.log("Modified heard: ", change.doc.data());
  }
  if (change.type === "removed") {
    console.log("Removed heard: ", change.doc.data());
  }
});

【讨论】:

  • 看起来你仍然在这里调用 docChangse 作为函数。
猜你喜欢
  • 2019-02-02
  • 1970-01-01
  • 2019-02-15
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
相关资源
最近更新 更多