You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:01:12