首页 > 解决方案 > 从变量和状态中获取旧值

问题描述

嗨,我正在使用 firebase 和 react 钩子,我看到我的状态变旧或未更新函数内部的变量(guests / foreUpdate)的问题

//table that update the data
 onRowUpdate: (newData, oldData) =>
                  new Promise((resolve, reject) => {
                    setTimeout(() => {
                      //the upodated  values are here 
                      setGuests([...dataUpdate]);
                      foreUpdate=false;
                      firebase.database().ref().update(updates);
             
                     
                      resolve();
                    }, 500);
                  }),

未更新的代码是:

  const changeDbChangesEvents = () => {
        commentsRef.on("child_changed", (data) => {
    if (guests && foreUpdate) {  // 2 values arent updated. foreUpdate - is simple varibale not state
          const cloneGuests = _.cloneDeep(guests);
            setGuests(cloneGuests);
          }
          foreUpdate=true;
        });

标签: reactjsfirebasefirebase-realtime-databasereact-hooks

解决方案


看起来您正在使用旧状态,因为您一个接一个地执行代码。尝试将您的数据库更改代码变成useEffect这样:

useEffect(() => {
  firebase.database().ref().update(updates);
}, [updates]);

这可确保您仅使用最新值运行更新。


推荐阅读