Firebase 实时数据库侦听器被触发两次

时间:2021-06-13 21:03:05

标签: javascript firebase firebase-realtime-database

我想我发现了一个错误,除非我做错了什么。在我的代码中,我正在为一个节点设置一个侦听器并从另一个节点获取数据,如下所示:

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 节点上的侦听器?

0 个答案:

没有答案
相关问题