【发布时间】:2021-08-28 02:43:04
【问题描述】:
我一直面临这个问题。
我的代码现在在收到新消息时会消失。我想让消息堆积起来,但是我尝试了很多方法,但我没有解决它们。如果您能告诉我该怎么做,我将不胜感激。
当我进入消息室时,我从 firebase 服务器收到 25 条消息。 如果超过 25 条消息,最后一条消息将消失。 消失消息。我不想喜欢这个......
我想要这个。
这是我的消失代码
const messageLimit = 25;
const [messagesSnapshot] = useCollection(
db
.collection('chats')
.doc(id)
?.collection('messages')
.orderBy('timestamp', 'desc')
.limit(messageLimit),
);
if (messagesSnapshot) {
const snap = messagesSnapshot.docs;
const startPost = messagesSnapshot.docs[messagesSnapshot.docs.length - 1];
setStartAt(startPost);
const messages = snap.map(message => ({
id: message.id,
user: message.data().user,
messageInfo: {
...message.data(),
timestamp: message.data().timestamp?.toDate().getTime(),
},
}));
setMessagesList(messages);
}
const getMoreMessages = async () => {
if (!lastPost) {
setIsGetMessagesLoading(true);
const query = await db
.collection('chats')
.doc(id)
.collection('messages')
.orderBy('timestamp', 'desc')
.startAfter(startAt)
.limit(messageLimit)
.get();
const messages = query.docs.map(message => ({
id: message.id,
user: message.data().user,
messageInfo: {
...message.data(),
timestamp: message.data().timestamp?.toDate().getTime(),
},
}));
setStartAt(query.docs[query.docs.length - 1]);
setMessagesList([...messagesList, ...messages]);
setIsGetMessagesLoading(false);
messages.length === 0 ? setLastPost(true) : setLastPost(false);
}
};
useEffect(() => {
showMessages();
}, [messagesSnapshot]);
【问题讨论】:
-
看起来您已将消息限制设置为 25 。所以一次只能有 25 条消息。如果您收到 10 条新消息,那么您的前 10 条消息将由于限制而丢失。
-
感谢您回答我的问题。一开始只收到25条消息,不知道怎么堆积起来。
标签: reactjs firebase react-native google-cloud-firestore