从Firebase获取整理聊天数据时的状态与嵌套onSnapshot问题
Firebase聊天记录结构化获取问题
我需要把从Firebase获取的聊天记录整理成包含聊天对象和接收者的结构,遇到了以下两个问题:
问题一:代码需刷新应用才生效
第一段代码能完成整理工作,但必须刷新Expo应用后才会生效,排查后发现是因为处理逻辑执行时,users和chats状态还未完成设置。
useEffect(() => { const chatsSub = onSnapshot(collection(firestore, "Chats"), querySnapshot => { const data = [] querySnapshot.forEach((doc) => { data.push(doc.data()) }); console.log("Chats: ", data); setChats(data) const list = [] chats.forEach(chat => { if (chat.members.includes(userId)) { chat.members.forEach(y => { if (y !== userId) { console.log("receiver: " + y) users.forEach(z => { if (z.id === y) { console.log(z) list.push({ chat: chat, acc: z, user: user }) } }) console.log(list) } }) } }) setUserChats(list) console.log("Users Chats: " + userChats) }); }, [])
问题二:嵌套onSnapshot导致代码报错
尝试直接在整理用户聊天记录的逻辑里获取users和chats数据,但代码无法运行且报错,怀疑是嵌套使用onSnapshot导致的问题。
useEffect(() => { const list = [] doc.data().chatList.forEach(chatId => { const chatSub = onSnapshot(doc(firestore, "Chats", chatId), (doc1) => { doc1.data().members.forEach(member => { if (member !== userId){ const userSub = onSnapshot(doc(firestore, "Users", member), (doc2) => { list.push({ chat: doc1.data(), acc: doc2.data() }) }) } }) }) }) setUserChats(list) }, [])
内容的提问来源于stack exchange,提问作者MobileGamer
相关产品推荐
相关产品推荐

