我是Firebase和reactjs的新手。我想知道ID值 带firebase的reactjs中最后插入的查询的内容。谢谢
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
}, () => {
});
答案 0 :(得分:0)
其原因是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
}, () => { });
});
});