【发布时间】: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