如何从带有钩子和Context API的Firebase集合中获取有限数量的文档,但所有文档计数?

问题描述

好吧。假设我在firebase集合中有100个文档。我想获取其中的10个,但同时也需要获取总数,以实现创建分页的目的。

    const updateDocuments = useCallback((documents,size) => {
        dispatch({
            type: actions.UPDATE_DOCUMENTS,payload: {documents,size}
        });

    },[]);

    useEffect(() => {
       
        const ref = db.collection('documents').orderBy('createdAt','desc');

        const unsubscribe = ref.onSnapshot(async snapshot => {   
            const documents = await fetchDocuments(snapshot)
            const length = await fetchDocumentsCount(snapshot)
            updateDocuments(documents,length);
        });

        return () => {
            unsubscribe();
        }
    },[updateDocuments]);

好吧,现在可以确定上面的快照将提取100个文档,并且总数也为100。专家们已经可以猜测到我使用上下文api,并且将100个文档和总数推送到下面的该对象,并且希望在我喜欢的任何组件中使用它。

const state = {
    documents: [],size: 0
}

所以如果我创建引用为

const ref = db.collection('documents').orderBy('createdAt','desc').limit(10);

然后我会得到10个文档,但文档总数却变成10个。

那么我如何在相同的useEffect中获得10个文档,但是文档总数(在此示例中为100个)?

注意:

export const fetchDocuments = data => {   
    const documents= data.docs.map(doc => {
        const { name,email} = doc.data();       

        return {           
            name,email,}
    })
    return documents;
}

export const fetchDocumentsCount = data => data.size;

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)