Reactjs React应用程序中的Firebase实时数据库:如何访问这些值?
我正在开发一个应用程序,其中有一个版主在点击时写入数据库,而来宾只读取数据。如果user==id为true,则您是主持人。我想为主持人执行的来宾调用单击事件,以便他们也能看到结果。但是当我试图访问这些值时,他们说它是空的。唯一的方法是以来宾身份单击应用程序,我不希望这样做,因为来宾应该在不做任何操作的情况下进行更新。我有点困惑。如果我的描述不是很清楚,那么请提前道歉。我很乐意得到帮助Reactjs React应用程序中的Firebase实时数据库:如何访问这些值?,reactjs,firebase-realtime-database,react-hooks,Reactjs,Firebase Realtime Database,React Hooks,我正在开发一个应用程序,其中有一个版主在点击时写入数据库,而来宾只读取数据。如果user==id为true,则您是主持人。我想为主持人执行的来宾调用单击事件,以便他们也能看到结果。但是当我试图访问这些值时,他们说它是空的。唯一的方法是以来宾身份单击应用程序,我不希望这样做,因为来宾应该在不做任何操作的情况下进行更新。我有点困惑。如果我的描述不是很清楚,那么请提前道歉。我很乐意得到帮助 useEffect(() => { if(user && id){
useEffect(() => {
if(user && id){
if(user===id){
dbTimer.set(
{lastUpdated: Math.floor(Date.now() / 1000), isRunning});
}
else{
dbTimer.child("IsRunning").on("value", snap=>setIsRunning(snap.val()));
console.log("isRunning", isRunning) // null
if(isRunning){
mouseIsUpHandler();
}
}
}
}, [user, id, isRunning, isDown]);
你基本上是在正确的轨道上。我假设
setIsRunning
是一个useState
update函数。调用此函数并立即检查值将不起作用,因为isRunning
变量在调用update函数之前具有原始值。通过检查回调函数中的值,您应该能够获得所需的结果
useEffect(() => {
if(user && id){
if(user===id){
dbTimer.set(
{lastUpdated: Math.floor(Date.now() / 1000), isRunning});
} else {
dbTimer.child("IsRunning").on("value",
snap => {
const newIsRunning = snap.val();
setIsRunning(newIsRunning);
console.log("isRunning", newIsRunning);
if(newIsRunning){
mouseIsUpHandler();
}
});
}
}
}, [user, id, isRunning, isDown]);
谢谢你的回答。没错,setIsRunning是一个useState更新函数。isRunning的初始值为false。我以前也尝试过你的解决方案,但它仍然是空的,除非我不是以访客身份再次单击某个位置以快速被空覆盖。我认为你可能需要更新依赖项列表,以包括
mouseIsUpHandler
和setIsRunning
,这样效果将始终使用这些函数的最新版本。