Javascript 如何使用Firebase Firestore';s`docChanges`方法?

Javascript 如何使用Firebase Firestore';s`docChanges`方法?,javascript,firebase,google-cloud-firestore,react-native-firebase,Javascript,Firebase,Google Cloud Firestore,React Native Firebase,在使用react native firebase的react native应用程序中的操作中,我创建了一个Firestore快照侦听器: 听众: export const onAgendaChange = (uid, role, dispatch) => { // query based off role let query; if (role == 'Receiver') { query = 'receiver.uid'; } else {

在使用
react native firebase
的react native应用程序中的操作中,我创建了一个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()
作为方法。有什么想法吗?

这个问题是因为在使用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());
  }
});

您确定该消息引用的是此代码吗?@DougStevenson如果我取消使用
docChanges()
,则无发布的更改应始终是函数而不是数组。如果您有一个可复制的示例提出了其他建议,那么您可以向Firebase支持部门提交该错误报告。这是使用react native firebase,你认为这有关系吗?也许。不过,将问题标记为这样。看起来您仍在将dochangse作为函数调用。