javascript - React Class 方法返回 undef 而不是经过验证的值
问题描述
这个问题似乎很基本,但我坚持这一点。我有一个不是组件的类,我用它来初始化数据库并执行数据库 CRUD 操作。该类有一个方法 readMatrix 从数据库中读取字典并将其作为矩阵返回。我可以在控制台中检查矩阵的值,它是正确的。但是,返回给调用函数的值是“未定义”,而不是我在控制台日志中看到的值。我尝试用 Redux/Hooks 修复它,发现这种方式对于像我这样的新手来说太复杂了(我使用函数/钩子作为组件,但是一个用于 DB 管理的类)。
这是该类的代码:
readMatrix (r,c,id) {
const row = new Array(c).fill(null);
var tempMatrix=[];
for (let i=0; i<r; i++){
tempMatrix.push([...row])
}
var restaurantRef = app.database().ref("/restaurants");
restaurantRef.orderByKey().equalTo("1").on("child_added", function(snapshot){
// console.log(snapshot.child("/layout").val());
var restaurant=snapshot.child("/layout").val();
for (const [key, value] of Object.entries(restaurant)) {
let i=key;
for (const [rowkey, rowvalue] of Object.entries(value)){
let j=rowkey;
tempMatrix[i][j]=rowvalue;
}
}
console.log(tempMatrix);
return(tempMatrix);
});
}
这是调用函数:
useEffect(()=>{
setMatrix(FirebaseClass.readMatrix(matrixHeight,matrixWidth, 1))
console.log(matrix);
}, []);
知道那里有什么问题吗?
解决方案
感谢您的回答
这是修复它的唯一想法。
- 将 readMatrix 声明为异步。
- 通过以下方式获取矩阵中的值:
FirebaseClass.readMatrix(matrixHeight,matrixWidth, 1).then(setMatrix)
希望答案比问题更清楚。
推荐阅读
- android - 在 android 8 上使用 android 数据绑定时应用程序崩溃
- docker - 在docker中安装cuda而不提示
- javascript - 如何迭代`address_component`以获得`country`或任何
- wordpress - 更新 wordpress 网站中的页面内容
- docker - Kubernetes 创建私有命名空间/域 (FQDN)
- reactjs - 如何将 URL 参数传递给反应应用程序?
- spring-mvc - 控制器看到 .html 页面但没有看到 .jsp
- android-gradle-plugin - Gradle-Android:classpath() 来自哪里?
- android - 将点指示器添加到 View-pager
- c# - 如何存储链接按钮中的值并将其分配给另一个页面上的文本框