下面是一个从firebase数据库获取消息的函数,但它只有setState
只有一个消息。关于反应中的setState
但是,console.log
可以记录对象中的多个消息。 我的功能有什么问题吗?
getMessages(){
var messages = [];
firebaseApp.database().ref('users/'+firebase.auth().currentUser.uid+'/userChat/'+firebase.auth().currentUser.uid).orderByValue().limitToLast(10).once('value', (dataSnapshot) => {
//alert(JSON.stringify(dataSnapshot.val()));
dataSnapshot.forEach((child) => {
firebaseApp.database().ref('messages').child(child.key).once("value", (message)=>{
//alert(JSON.stringify(messages));
messages.push({
_id: Math.round(Math.random() * 1000000),
text: message.val().text,
createdAt: new Date(message.val().timestamp),
user: {
_id: 1,
name: 'Developer',
},
});
this.setState({
messages: messages
});
console.log('woooo'+JSON.stringify(messages));
});
});
});
}
这是不是等同于'this.setState({messages:[]})',因为它在消息firebase回调被触发之前运行? –
@JanneKlouman看起来像是对的,超出了第二个'ref'范围。 –
有没有办法将所有的消息保存在变量中,然后setState只保存一次? – wo99999