【发布时间】:2022-01-09 20:31:26
【问题描述】:
我想使用 onSnapshot 从 Firestore 集合中自动获取新的传入消息。虽然我可以在回调中设置状态,但我无法读取它。
const [messages, setMessages] = useState(null);
const [chat, setChat] = useState(props.chatId);
useEffect(() => {
const q = query(collection(db, "messages"), where("chat_id", "==", chat), orderBy("date","desc"), limit(5));
// Create the DB listener
const unsuscribe = onSnapshot(q, (querySnapshot) => {
console.log(messages);
if(messages === null){
console.log("setting messages the first time");
setMessages(querySnapshot.docs)
}else{
console.log("updating messages");
setMessages([...querySnapshot.docs, ...messages])
}
});
return () => {
console.log("unsubscribe");
unsuscribe();
}
}, [chat]);
每当onSnapshot 触发时,messages 始终为null,但setMessages 在消息显示后有效。我尝试了很多方法,但我无法让它发挥作用。
非常感谢您的帮助。
【问题讨论】:
标签: javascript reactjs firebase google-cloud-firestore react-hooks