Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs React应用程序中的Firebase实时数据库:如何访问这些值?_Reactjs_Firebase Realtime Database_React Hooks - Fatal编程技术网

Reactjs React应用程序中的Firebase实时数据库:如何访问这些值?

Reactjs React应用程序中的Firebase实时数据库:如何访问这些值?,reactjs,firebase-realtime-database,react-hooks,Reactjs,Firebase Realtime Database,React Hooks,我正在开发一个应用程序,其中有一个版主在点击时写入数据库,而来宾只读取数据。如果user==id为true,则您是主持人。我想为主持人执行的来宾调用单击事件,以便他们也能看到结果。但是当我试图访问这些值时,他们说它是空的。唯一的方法是以来宾身份单击应用程序,我不希望这样做,因为来宾应该在不做任何操作的情况下进行更新。我有点困惑。如果我的描述不是很清楚,那么请提前道歉。我很乐意得到帮助 useEffect(() => { if(user && id){

我正在开发一个应用程序,其中有一个版主在点击时写入数据库,而来宾只读取数据。如果user==id为true,则您是主持人。我想为主持人执行的来宾调用单击事件,以便他们也能看到结果。但是当我试图访问这些值时,他们说它是空的。唯一的方法是以来宾身份单击应用程序,我不希望这样做,因为来宾应该在不做任何操作的情况下进行更新。我有点困惑。如果我的描述不是很清楚,那么请提前道歉。我很乐意得到帮助

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
,这样效果将始终使用这些函数的最新版本。