我试图添加一个功能到我的聊天应用程序,让用户回到他们最近访问过的聊天室,并创建了一个消息。现在我只是试图显示页面上的聊天室名称。
我的firebase数据库结构是这样的。
-ChatRooms(collection)
-"chat room name" (document)
-room(name of chat room)
-uid
-messages(subcollection)
-created
-room(name of chat room)
-text
-uid
-user(display name)
-userPic
字符串
我试图进入“messages”子集合,这样我就可以查询它,只显示用户访问过的聊天室的名称。如果messages子集合中文档的“uid”与firebase“auth”currentUser.uid的“uid”匹配,
这是我的代码。
const [chatRoomData, setChatRoomData] = useState([]);
const [firebaseUserInfo, setFirebaseUserInfo] = useState(auth.currentUser);
useEffect(() =>{
onAuthStateChanged(auth, currentUser => {
setFirebaseUserInfo(currentUser);
const chatRoomCollectionRef = collection(dataBase, "ChatRooms/room/messages");
console.log(chatRoomCollectionRef)
const queryChatRooms = query(chatRoomCollectionRef, where("uid", "==", currentUser.uid));
const unSubscribe = onSnapshot(queryChatRooms, (snapshot) => {
const chatRooms = [];
snapshot.forEach((doc) => {
chatRooms.push({...doc.data(), id: doc.id});
});
setChatRoomData(chatRooms);
})
return () => unSubscribe();
})
}, []);
return (
<>
<div className="chats-container">
<header className='header-container'>
<h1 className="header">Your Chats</h1>
</header>
{chatRoomData.map((data) =>(
<div className='users-chatRooms-container' key={data.id}>
<button className='users-chatRooms'>{data.chatRoom}</button>
</div>
))}
</div>
</>
);
}
型
我尝试了这个,页面上没有显示任何内容。我的代码有什么问题?
2条答案
按热度按时间q7solyqu1#
这是我在没有看到数据的情况下能做的最好的例子
字符串
请确保将'your-firebase-config'替换为实际的Firebase配置。如果这不能解决问题,请考虑检查Firestore结构并相应地调整代码。
或者如果问题只是打印下一个对象
你可以用递归来解决这个问题,这里有一个例子:
型
rxztt3cl2#
你需要引用每个“room”文档,然后访问它的“messages”子集合。另外,确保你使用了正确的字段名称。尝试以下代码:
字符串
请务必根据原计划调整进口报表。如有疑问,请咨询。