有没有办法在不删除它的情况下暂停 Firestore 侦听器?
我有多个 firebase 侦听器,其中一些依赖于其他侦听器,这些侦听器会在数据更改时更改或启动其他侦听器。假设我的第一个侦听器启动了第二个侦听器onSnapshot
。第一个侦听器开始于useEffect
. 对于某些情况,我可能不想更改第二个侦听器,因此我需要丢弃来自第一个侦听器的数据更改更新。
如果条件满足(单击按钮),我会暂时丢弃第一个侦听器上的数据更改。目前我正在使用带有useRef
. 我的react应用程序运行良好,有这样的依赖侦听器。我可以删除监听器,但我不想删除并重新创建监听器。
我想知道是否有可供任何听众使用的暂停机制或方法。我认为如果有这样的方法,它将节省很小的读取成本,因为我没有使用在 Snapshot 上发送的数据。
代码示例:
useEffect(() => {
let firstListener, secondListener;
//console.log("useEffect...");
function ListenerFunc(p) {
secondListener = await firestore
.collection("test")
.doc(p)
.onSnapshot((doc) => {
//console.log("Current data: ", doc.data());
//Need to discard unwanted change here.
//Changing it on button click for a 2 seconds then it changes back to : pauser.current = false.
if (pauser.current) {
console.log("paused for a moment.");
//pauser.current = false;
return;
}
else {
//update.
}
})
}
firstListener = firestore
.collection("test")
.doc("tab")
.onSnapshot((doc) => {
//console.log("Current data: ", doc.data());
var p = doc.data().p; //get variable p
ListenerFunc(p);
});
// cleanup.
}