来自函数的数据在第一次加载时为空

Data from function is null on first load

我正在使用另一个文件中的函数从 Firebase 获取数据。但是,第一次加载应用程序时,我没有获取数据。数据很好。当我在将它添加到变量后立即写入控制台时,我看到了它们。但是,Return 不会 return 它们并且 return 只是一个空字段。

如果我在加载后编辑并保存文件,则会刷新应用程序并加载数据。这个解决方案是否正确?那我想在那里有更多的功能。

const Page = () => {
  const [categories, setCategories] = useState([]);

  const fetchMainCategories = async () => {
    const results = placesB.getMainCategories();
    setCategories(results);
  };

  useEffect(() => {
    fetchMainCategories();
  }, []);

}
export default Page;
class Categories {
    getMainCategories(){
        let val = [];
        const reference = query(ref(db, 'categories/1/'));
        onValue(reference, (snapshot) => {
            val = snapshot.val();
            console.log(val); // It always lists the data here
        });
        return val; // HERE IS THE PROBLEM. On the first load is this empty!
    }
}
const cats = new Categories();
export default cats;

请问有人能帮帮我吗?

尝试设置条件,如 if(val) then return val....

onValue() returns 数据异步,因此数组总是返回空。由于您只需要获取一次数据,因此请使用 get() 而不是 onValue():

class Categories {
    // async 
    async getMainCategories() {
        const reference = query(ref(db, 'categories/1/'));
        const snap = await get(reference);
        return snap.val();
    }
}

然后你调用这个方法如下:

const fetchMainCategories = async () => {
  // await here
  const results = await placesB.getMainCategories();
  console.log(results);
  setCategories(results);
};