下面是一個從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