【发布时间】:2018-04-06 11:42:32
【问题描述】:
在帖子底部回答 (另见@soutot 答案)
我已经成功地从我的Firebase 代码中获得了文本输出,所以我知道它有效。现在我需要循环Firebase 中的所有孩子。来自 swift 的方法是将每个项目存储在 tempObject 上,然后将其附加到数组中。然后,您可以以任何您喜欢的方式简单地使用该数组。这似乎不适用于JavaScript,或者我做错了什么。我现在拥有的功能齐全的 FB 代码是:
componentDidMount(){
let child = ""
var ref = firebase.database().ref("testCategory");
ref.once("value")
.then(function(snapshot) {
child = snapshot.child("test1/testHeader").val()
this.setState( {
child
})
}.bind(this));
}
然后我可以在控制台或<Text> 中成功打印此内容。现在,我遇到的问题是循环所有子项,将它们添加到数组中,然后使用该数组显示数据。在我看来,它应该是这样工作的:
componentDidMount(){
let child = ""
var ref = firebase.database().ref("testCategory");
ref.once("value")
.then(function(snapshot) {
snapshot.forEach(function(childSnapshot){
let tempObject = MyFirebase
tempObject.testHeader =
childSnapshot.val()
myArray.append(tempObject) //or .push???
})
this.setState( { //PASSING VARIABLE TO STATE
child
})
}.bind(this)); //BINDING TO SET STATE
}
我知道这显然是错误的。创建这样的对象甚至都行不通...MyFirebase -class 看起来像这样:
render() {
let testHeader = ""
let testText = ""
)
}
我的Firebase 数据库如下所示:
(我暂时忽略了 subText)
非常感谢所有建议:)
工作代码
//FIREBASE CODE
componentDidMount(){
const ref = firebase.database().ref("testCategory");
ref.once("value")
.then(function(snapshot) {
const categories = []
//LOOPING EACH CHILD AND PUSHING TO ARRAY
snapshot.forEach(item => {
const temp = item.val();
categories.push(temp);
return false;
});
this.setState( { //PASSING VARIABLE TO STATE
child,
categories
})
}.bind(this)); //BINDING TO SET STATE
}
【问题讨论】:
-
在实时数据库的情况下,数据存储为 JSON,所以您的问题似乎是:how to recursively iterate over an object。
标签: javascript firebase react-native firebase-realtime-database