我在 useEffect 中有五个快照侦听器,我还有另一个调用 api 来从 firestore 获取数据并更新状态,但我面临的问题是每个初始挂载都调用了所有侦听器,我的目标是我希望仅在文档更改时调用所有侦听器
我尝试使用useRef它可以工作,但监听器不会触发
正如您在下面的示例中看到的, onSnapshot在初始安装期间打印
useEffect(() => {
if (isFirstMount.current) return;
someFirestoreAPICall.onSnapshot((snap) => {
//called every initial mount
});
someFirestoreAPICall.onSnapshot((snap) => {
//called every initial mount
});
}, []);
useEffect(() => {
if (isFirstMount.current) {
isFirstMount.current = false;
return;
}
}, []);
useEffect(() => {
const fetchData = async () => {
setLoading(true);
let snap = await someFirestoreAPICall.get();
setData(snap.docs.map((doc) => ({ ...doc.data(), id: doc.id })));
setLoading(false);
};
fetchData();
}, []);