首页 > 解决方案 > Firebase / ReactJS,获取数据库中的最后一个查询

问题描述

我是 firebase 和 reactjs 的新手。我想知道用 firebase 在 reactjs 中获取最后插入查询的 ID 值。谢谢

firebase.database().ref().child("clients").orderByChild("ID").limitToLast(1)("value", function (snapshot) {
  snapshot.forEach(function(childSnapshot) {
    var cellNum=childSnapshot.val().CellNum;

  });
});

this.setState(
{
  ID: cellNum

}, () => {

});

在此处输入图像描述

标签: javascriptreactjsfirebasefirebase-realtime-database

解决方案


原因是 Firebase 异步加载数据。由于这可能需要一些时间,它允许您的代码继续。然后,一旦数据可用,它就会使用数据快照调用您的回调。

使用一些放置良好的日志语句最容易看到这一点:

console.log("Before starting query")
firebase.database().ref().child("clients").orderByChild("ID").limitToLast(1)("value", function (snapshot) {
  console.log("Got data");
});
console.log("After starting query")

当您运行此代码时,它会打印:

开始查询前

开始查询后

得到数据

这可能不是您期望的顺序。但它完美地解释了为什么setState代码中的调用失败。当您调用时setState,数据尚未加载。

cellNum仅在回调中可用。所以调用setState也需要在那个回调中:

firebase.database().ref().child("clients").orderByChild("ID").limitToLast(1)("value", function (snapshot) {
  snapshot.forEach(function(childSnapshot) {
    var cellNum=childSnapshot.val().CellNum;
    this.setState({
      ID: cellNum
    }, () => { });
  });
});

推荐阅读