Javascript Firebase ref.on(';value';)连续调用,即使没有更改
我正在使用事件侦听器检查实时数据库的更改Javascript Firebase ref.on(';value';)连续调用,即使没有更改,javascript,reactjs,firebase,firebase-realtime-database,Javascript,Reactjs,Firebase,Firebase Realtime Database,我正在使用事件侦听器检查实时数据库的更改 const [chats, setChats] = useState({}); const ref = db.ref(`users/${sender}/chat/`); ref.on('value', (snapshot) => { const data = snapshot.val(); setChats(data); }); 我总是得到太多的重新渲染。Firebase文档说它只应该在孩子们发生变化时更新。我做错
const [chats, setChats] = useState({});
const ref = db.ref(`users/${sender}/chat/`);
ref.on('value', (snapshot) => {
const data = snapshot.val();
setChats(data);
});
我总是得到太多的重新渲染。Firebase文档说它只应该在孩子们发生变化时更新。我做错什么了吗?是否有解决方法?问题最有可能是问题中的代码在每次渲染时运行,更改状态,然后重新渲染。无限循环 试着用一种新的方法。在中删除侦听器的额外点数
const[chats,setChats]=useState({});
useffect(()=>{
const ref=db.ref(`users/${sender}/chat/`);
//值侦听器函数
const onValue=快照=>{
setChats(snapshot.val())
}
//寄存器侦听器
参考on(‘值’、on值);
//返回清除函数以删除侦听器
return()=>ref.off(“value”,onValue)
}, [])
问题很可能是问题中的代码在每次渲染时运行,更改状态,从而重新渲染。无限循环
试着用一种新的方法。在中删除侦听器的额外点数
const[chats,setChats]=useState({});
useffect(()=>{
const ref=db.ref(`users/${sender}/chat/`);
//值侦听器函数
const onValue=快照=>{
setChats(snapshot.val())
}
//寄存器侦听器
参考on(‘值’、on值);
//返回清除函数以删除侦听器
return()=>ref.off(“value”,onValue)
}, [])
这似乎出乎意料,但我在您共享的代码中没有看到任何可以解释这一点的内容。你是否可以在jsbin或stackblitz这样的网站上设置一个最小复制,这样我就可以看一看?这似乎出乎意料,但我在你共享的代码中没有看到任何可以解释这一点的东西。你是否可以在jsbin或stackblitz这样的网站上设置一个最小的复制,这样我就可以看一看?