如何解决如何使用Firebase Firestore的`docChanges`方法?
在使用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());
}
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。