Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在react中对Firestore数据进行分页?_Javascript_Reactjs_Firebase_Google Cloud Firestore - Fatal编程技术网

Javascript 如何在react中对Firestore数据进行分页?

Javascript 如何在react中对Firestore数据进行分页?,javascript,reactjs,firebase,google-cloud-firestore,Javascript,Reactjs,Firebase,Google Cloud Firestore,因此,我一直在开发一个类似Instagram的web应用程序,我试图对firestore中的数据(帖子)进行分页,我尝试了下面的代码,但在调用函数loadMorePosts时,它只显示接下来的两篇posts,而不保留以前的新帖子 问题1:为什么在功能loadMorePosts中设置帖子时不保留以前的新帖子? 我试着应用排列运算符,但没有效果 setPosts(...posts, snapShot.docs.map((doc) => ({ id: doc.id, post

因此,我一直在开发一个类似Instagram的web应用程序,我试图对firestore中的数据(帖子)进行分页,我尝试了下面的代码,但在调用函数
loadMorePosts
时,它只显示接下来的两篇
posts
,而不保留以前的新帖子

问题1:为什么在功能
loadMorePosts
中设置帖子时不保留以前的新帖子?
我试着应用排列运算符,但没有效果

setPosts(...posts,
          snapShot.docs.map((doc) => ({ id: doc.id, post: doc.data() }))
        );
问题2:为什么
snapShot.docs[snapShot.docs.length-1]
是一个对象,它不应该是一个数字吗?

问题3:如何知道没有更多的帖子可以获取?

代码:


问题1:为什么在函数loadMorePosts中设置post时不保留以前的新post? 由于post是一个数组,因此必须使用以下命令:

setPosts([...posts,
      ...snapShot.docs.map((doc) => ({ id: doc.id, post: doc.data() }))
    ]);
问题2:为什么snapShot.docs[snapShot.docs.length-1]是一个对象,它不应该是一个数字吗
它显然是一个物体,怎么可能是一个数字呢<它就像:

snapShot.docs = [ {object 1}, {object 2}, {object 3} ]
snapShot.docs[snapShot.docs.length - 1] = snapShot.docs[2] = {object 3}
问题3:如何知道没有更多的帖子可以获取

你可以这样做:

const [ hasMore, setHasMore ] = useState(false);
setHasMore(snapShot.docs.length > 0);

Firestore分页工作基于光标查询和已知所谓的锚对象,而不是您似乎已经习惯的数字偏移量。有关Firestore分页模型的完整解释,请参见,我尝试了您的解决方案,但出现了一个问题,数组设置为
posts[{prevData},{prevData},[{newData},{Data}]]
,因为我们使用的是映射,它在对象数组中返回一个对象数组,所以您知道如何解决这个问题posts=[{prevData},{prevData}[{newData},{Data}]]您可以在map函数中使用spread将对象数组扩展到objects.setPosts([…posts,…snapShot.docs.map((doc)=>({id:doc.id,post:doc.Data()}]));嘿,你的解决方案是可行的,但是当我们添加新的
帖子时,它只会显示你看到的任意数量的帖子中排名前2位的帖子。请帮忙!!
const [ hasMore, setHasMore ] = useState(false);
setHasMore(snapShot.docs.length > 0);