我想我发现了一个错误,除非我做错了什么。在我的代码中,我正在为一个节点设置一个侦听器并从另一个节点获取数据,如下所示:
import React from "react";
import { firebase } from "../lib/firebase";
export default function Test() {
React.useEffect(() => {
const userRef = firebase
.database()
.ref("data")
.orderByChild("addedBy")
.equalTo("some-user-uid");
userRef.on("value", (snapshot) => {
console.log("value", snapshot.val());
});
const systemRef = firebase
.database()
.ref("data")
.orderByChild("addedBy")
.equalTo("system");
systemRef.get();
return () => userRef.off()
}, []);
return <div>1</div>;
}
当我加载页面时,console.log
被触发两次,第一次是实际用户数据,但第二次显示 null
。
如果我向用户引用添加一些数据,userRef
中的快照仅包含完整数据的部分。
如果我删除第二个块,即 systemRef
,那么一切都按预期工作,即 console.log
被实际用户数据触发一次,随后的数据添加触发 on
侦听器快照中的内容。
所以我想知道,为什么从 get
节点获取带有 system
的数据会以某种方式影响 user
节点上的侦听器?