簡體   English   中英

如何在 react-bootstrap 分頁中使用省略號

[英]How to use Ellipsis in react-bootstrap pagination

嗨,我正在使用反應分頁及其工作正常,並使用 api 分頁。 但沒有得到正確的方式。 當我使用{paginationItems}時,它會在一行中顯示所有頁面,我想在 Ellipsis 中使用它

我得到的這個結果在此處輸入圖像描述

我想要這個結果在此處輸入圖像描述

我的代碼

import React, { useEffect, useState, useMemo } from "react";
import Pagination from "react-bootstrap/Pagination";

    const PaginationComponent = ({
      total = 0,
      itemsPerPage = 10,
      currentPage = 1,
      onPageChange,
    }) => {
      const [totalPages, setTotalPages] = useState(0);
    
      useEffect(() => {
        if (total > 0 && itemsPerPage > 0)
          setTotalPages(Math.ceil(total / itemsPerPage));
      }, [total, itemsPerPage]);
    
      const paginationItems = useMemo(() => {
        const pages: any = [];
    
        for (let i = 1; i <= totalPages; i++) {
          pages.push(
            <Pagination.Item
              key={i}
              active={i === currentPage}
              onClick={() => onPageChange(i)}
            >
              {i}
            </Pagination.Item>
          );
        }
    
        return pages;
      }, [totalPages, currentPage]);
    
      if (totalPages === 0) return null;
    
      return (
        <Pagination className="paginationInfo">  
          <Pagination.Prev
            onClick={() => onPageChange(currentPage - 1)}
            disabled={currentPage === 1}
          />
          {paginationItems}
          <Pagination.Next
            onClick={() => onPageChange(currentPage + 1)}
            disabled={currentPage === totalPages}
          />
        </Pagination>
      );
    };
    
    export default PaginationComponent;

我重構了循環並添加分頁項的邏輯,以使用幫助程序 function 創建分頁項:

const createPaginationItem = (i) => {
    return <Pagination.Item
        key={i}
        active={i === currentPage}
        onClick={() => onPageChange(i)}
      >
        {i}
      </Pagination.Item>
};

要獲得你想要的布局,你有 2 很多省略號:

<< | < | 1 |...| 10 | 11 | 12 | 13 | 14 |...| 20 | > | >>

你可以改變你的循環如下:

const paginationItems = [];
// Add the first item (page 1)
paginationItems.push(createPaginationItem(1));
// Add the first ellipsis
paginationItems.push(<Pagination.Ellipsis />);
// Create page numbers in the middle (10-14)
const midpoint = totalPages/2;
for (let i = midpoint; i <= midpoint + 4; i++) {
  paginationItems.push(createPaginationItem(i));
}
// Add the second ellipsis
paginationItems.push(<Pagination.Ellipsis />);
// Add the last item (page 20)
paginationItems.push(createPaginationItem(totalPages));

有關工作演示,請參閱此 StackBlitz

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM