Firebase ref.on('value ')连续调用,即使没有变化

j91ykkif  于 2022-11-30  发布在  其他
关注(0)|答案(1)|浏览(123)

我正在使用事件侦听器检查实时数据库的更改。

const [chats, setChats] = useState({});
  const ref = db.ref(`users/${sender}/chat/`);
  ref.on('value', (snapshot) => {
    const data = snapshot.val();
    setChats(data);
  });

我总是收到太多的重新渲染。Firebase文档说它只应该在子对象发生变化时更新。我做错了什么吗?有解决方法吗?

mqkwyuun

mqkwyuun1#

问题很可能是您问题中的代码在每次渲染时运行,更改状态,从而重新渲染。Ala无限循环
尝试使用useEffect hook。在清理中删除侦听器的加分

const [chats, setChats] = useState({});

useEffect(() => {
  const ref = db.ref(`users/${sender}/chat/`);

  // value listener function
  const onValue = (snapshot) => {
    setChats(snapshot.val());
  };

  // register listener
  ref.on("value", onValue);

  // return a cleanup function to remove the listener
  return () => ref.off("value", onValue);
}, [sender]);

使用V9SDK看起来有些不同。

useEffect(() => {
  const chatRef = ref(db, `users/${sender}/chat/`);

  // return the unsubscribe function
  return onValue(chatRef, (snapshot) => {
    setChats(snapshot.val());
  });
}, [sender]);

相关问题