【发布时间】:2021-02-17 15:28:37
【问题描述】:
我正在我的应用程序中创建一个利用 Firebase 的聊天功能。我已经阅读了有关添加事件侦听器的文档,但我似乎无法让侦听器更新状态(我相信当状态更新时,应用程序会重新呈现并且应该有新的传入消息)
用例: 您正在与某人聊天,并且您已打开消息/聊天屏幕,并且不想刷新页面以查看新消息...它们应该在消息发布到数据库时显示
componentDidMount() {
this.setState({ isLoading: true })
this.pullMessages()
this.listener()
this.setState({ isLoading: false })
pullMessages = () => {
let messagesArray = []
if (this.state.chatroomDetails.users.length === 2) {
firebase.firestore().collection('chatrooms').doc('private').collection(this.state.chatroomDetails.key).doc('messages').collection('messages').get().then((querySnapshot) => {
if (!querySnapshot.empty) {
querySnapshot.forEach((doc) => {
messagesArray.push(doc.data())
this.setState({ messages: messagesArray })
})
}
})
}
else {
firebase.firestore().collection('chatrooms').doc('group').collection(this.state.chatroomDetails.key).doc('messages').collection('messages').get().then((querySnapshot) => {
if (!querySnapshot.empty) {
querySnapshot.forEach((doc) => {
messagesArray.push(doc.data())
// console.log(messagesArray)
this.setState({ messages: messagesArray })
})
} else {
console.log('Nothing to Grab')
}
})
}
}
listener = () => {
let messagesArray = []
if (this.state.chatroomDetails.users.length === 2) {
firebase.firestore().collection('chatrooms').doc('private').collection(this.state.chatroomDetails.key).doc('messages').collection('messages')
.onSnapshot(function (querySnapshot) {
if (!querySnapshot.empty) {
querySnapshot.forEach(function (doc) {
console.log('the console');
console.log(doc.data());
messagesArray.push(doc.data())
})
}
})
this.setState({ messages: messagesArray })
}
}
在 listener() 中,我可以看到来自其他设备的新消息,但我似乎无法从这里将其设置为我的状态...帮助!
【问题讨论】:
标签: reactjs firebase react-native chat addeventlistener