javascript - 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
}, () => {
});
解决方案
原因是 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
}, () => { });
});
});
推荐阅读
- python - 获取映射值的余弦距离的有效(不是 DataFrame.apply)方法
- pytorch - 在内部理解 pytorch conv2d
- css - Firefox 悬停似乎忽略已访问
- php - 使用 PHP 处理 XML 文件/数据
- php - WooCommerce - 仅为销售产品创建优惠券
- python-3.x - python 3.10 pip 安装库
- spring-boot - JPA 规范分组
- c - arc4random_uniform 和 PCG 中的均匀分布
- apache - 不要将重写规则应用于特定的文件扩展名
- angular - 将 mathJax 集成到我的 Angular 项目中