我正在使用Firebase-Cloud Firestore,目前我想对所有可用记录进行分页。我已经有记录列表了,剩下的就是一些分页了。我是Cloud Firestore的新手,因此感谢您提供任何清晰度。
我检查了Firestore文档(https://firebase.google.com/docs/firestore/query-data/query- cursors#paginate_a_query)和带有ReactJS的示例,但没有太多可用。
我理解例如:.startAt(0), .limit(10),但问题是如何使用在render方法中调用的该组件正确进行分页。
.startAt(0), .limit(10)
import React, { Component } from 'react'; import Pagination from "react-js-pagination"; import firestore from "./Firebase"; export default class DataList extends Component { constructor(props) { super(props); this.state = { dbItems: [], currentPage: 1, itemsPerPage: 3, totalItemCount: 1, activePage: 15 } this.handlePageChange = this.handlePageChange.bind(this); } handlePageChange(pageNumber) { console.log(`active page is ${pageNumber}`); this.setState({ activePage: pageNumber }); } async getItems() { const { currentPage, itemsPerPage } = this.state; const startAt = currentPage * itemsPerPage - itemsPerPage; const usersQuery = firestore.collection('Users').orderBy("email").startAt(startAt).limit(itemsPerPage) const snapshot = await usersQuery.get() const items = snapshot.docs.map(doc => doc.data()) return this.setState({ dbItems: items, totalItemCount: firestore.collection('Users').get().then(res => console.log(res.size)) }) } componentDidMount() { this.getItems() } componentDidUpdate(prevProps, prevState) { const isDifferentPage = this.state.currentPage !== prevState.currentPage if (isDifferentPage) this.getItems() } render() { return ( <div> {this.state.dbItems.map((users, index) => { return ( <p key={index}> <b>First Name:</b> {users.firstname} <br /> <b>Email:</b> {users.email} </p> ) }) } <Pagination activePage={this.state.activePage} itemsCountPerPage={this.state.itemsPerPage} totalItemsCount={this.state.totalItemCount} pageRangeDisplayed={this.state.itemsPerPage} onChange={this.handlePageChange} /> </div> ) } }
感谢您的帮助!
分页可以使用 startAt()
startAt()
// Get Items. async fetchUsers = () => { // State. const {users, usersPerPage} = this.state // Last Visible. const lastVisible = users && users.docs[users.docs.length - 1] // Query. const query = firestore.collection('Users') .orderBy('email') .startAfter(lastVisible) .limit(usersPerPage) // Users. const users = await query.get() // .. return this.setState({users}) } // Did Mount. componentDidMount() { this.fetchUsers() } // Did Update. componentDidUpdate(prevProps, prevState) { const isDifferentPage = this.state.currentPage !== prevState.currentPage if (isDifferentPage) this.fetchUsers() }