Reactjs 超过firebase中的限制时onSnapshot不工作

Reactjs 超过firebase中的限制时onSnapshot不工作,reactjs,firebase,google-cloud-firestore,Reactjs,Firebase,Google Cloud Firestore,我试图限制在我的web应用程序中显示的邮件数量,当我尝试使用orderBy限制时,它在超过限制后停止显示新邮件(即15条),那么我哪里做错了 PS:我尝试了orderBy(“createdAt”、“desc”),它显示了新消息,但顺序是降序的 代码: useEffect(() => { const unsub = db .collection("messages") .orderBy("createdAt")

我试图限制在我的web应用程序中显示的邮件数量,当我尝试使用
orderBy
限制时,它在超过限制后停止显示新邮件(即15条),那么我哪里做错了

PS:我尝试了orderBy(“createdAt”、“desc”),它显示了新消息,但顺序是降序的

代码:

useEffect(() => {
    const unsub = db
      .collection("messages")
      .orderBy("createdAt")
      .limit(15)
      .onSnapshot((snapshot) => {
        setMessages(
          snapshot.docs.map((doc) => ({ id: doc.id, msg: doc.data() }))
        );
      });
    return unsub;
  }, []);

您正在为这15个文档上的更改建立侦听器—您已经限制了要监视的文档。查询正在做它应该做的事情。听起来这不是你真正想要的

您只需对15个文档执行一次提取(
.get()
),然后根据您想要的任何事件(单击等)使用
.startAfter().get()
来获取下一组

如果(big IF)需要监视文档子集上的更改,则需要删除第一组文档上的侦听器,并在下一组文档上创建新的侦听器


请记住:
onSnapShot()
是一个侦听器,侦听更改。如果这不是真正的要求,只需使用
.get()

当使用仅附加列表时,您可以限制最初返回的值的数量,但仍然可以使用limitToLast()获得未来的添加:


如果您想显示15条最新的消息,这意味着您需要按降序创建:

db
  .collection("messages")
  .orderBy("createdAt", "desc")
  ...

如果您仍然希望在底部显示最新消息,则必须在应用程序代码中反转消息。

是的,这就是我的想法,但我不确定这是如何工作的。您是否在该代码中添加了
“desc”
?当你这么做的时候,发生了什么变化?我的意思是检查我上面评论中给出的链接是的,谢谢它正在工作,但也检查一下这个,我的意思是它是如何工作的working@Kato:嗯?Firestore何时添加了
limitToLast()
db
  .collection("messages")
  .orderBy("createdAt", "desc")
  ...