当前位置:首页 > React

如何用react做分页

2026-03-31 13:23:31React

使用React实现分页功能

分页功能通常需要结合前端组件和后端API共同实现。以下是几种常见的实现方法:

基础分页组件实现

创建一个基础的分页组件,接收当前页码、总页数和回调函数作为props:

function Pagination({ currentPage, totalPages, onPageChange }) {
  const pages = Array.from({ length: totalPages }, (_, i) => i + 1);

  return (
    <div className="pagination">
      <button 
        disabled={currentPage === 1}
        onClick={() => onPageChange(currentPage - 1)}
      >
        上一页
      </button>

      {pages.map(page => (
        <button
          key={page}
          onClick={() => onPageChange(page)}
          className={currentPage === page ? 'active' : ''}
        >
          {page}
        </button>
      ))}

      <button
        disabled={currentPage === totalPages}
        onClick={() => onPageChange(currentPage + 1)}
      >
        下一页
      </button>
    </div>
  );
}

结合API数据获取

在父组件中管理分页状态并获取数据:

function DataList() {
  const [data, setData] = useState([]);
  const [currentPage, setCurrentPage] = useState(1);
  const [totalPages, setTotalPages] = useState(1);

  useEffect(() => {
    async function fetchData() {
      const response = await fetch(`/api/data?page=${currentPage}`);
      const { items, totalPages } = await response.json();
      setData(items);
      setTotalPages(totalPages);
    }

    fetchData();
  }, [currentPage]);

  return (
    <div>
      {/* 渲染数据列表 */}
      {data.map(item => (
        <div key={item.id}>{item.name}</div>
      ))}

      <Pagination
        currentPage={currentPage}
        totalPages={totalPages}
        onPageChange={setCurrentPage}
      />
    </div>
  );
}

高级分页优化

对于大量数据的分页,可以考虑以下优化:

function AdvancedPagination({ currentPage, totalPages, onPageChange }) {
  const getVisiblePages = () => {
    const visiblePages = [];
    const maxVisible = 5;

    let start = Math.max(1, currentPage - Math.floor(maxVisible / 2));
    let end = Math.min(totalPages, start + maxVisible - 1);

    if (end - start + 1 < maxVisible) {
      start = Math.max(1, end - maxVisible + 1);
    }

    for (let i = start; i <= end; i++) {
      visiblePages.push(i);
    }

    return visiblePages;
  };

  return (
    <div className="pagination">
      <button disabled={currentPage === 1} onClick={() => onPageChange(1)}>
        首页
      </button>

      <button 
        disabled={currentPage === 1}
        onClick={() => onPageChange(currentPage - 1)}
      >
        上一页
      </button>

      {getVisiblePages().map(page => (
        <button
          key={page}
          onClick={() => onPageChange(page)}
          className={currentPage === page ? 'active' : ''}
        >
          {page}
        </button>
      ))}

      <button
        disabled={currentPage === totalPages}
        onClick={() => onPageChange(currentPage + 1)}
      >
        下一页
      </button>

      <button 
        disabled={currentPage === totalPages}
        onClick={() => onPageChange(totalPages)}
      >
        末页
      </button>
    </div>
  );
}

使用第三方库

对于更复杂的需求,可以考虑使用现成的分页库:

import ReactPaginate from 'react-paginate';

function LibraryPagination({ pageCount, onPageChange }) {
  return (
    <ReactPaginate
      pageCount={pageCount}
      pageRangeDisplayed={5}
      marginPagesDisplayed={2}
      onPageChange={onPageChange}
      containerClassName="pagination"
      activeClassName="active"
    />
  );
}

样式处理

为分页组件添加基本CSS样式:

如何用react做分页

.pagination {
  display: flex;
  justify-content: center;
  margin-top: 20px;
  gap: 5px;
}

.pagination button {
  padding: 5px 10px;
  border: 1px solid #ddd;
  background: white;
  cursor: pointer;
}

.pagination button.active {
  background: #007bff;
  color: white;
  border-color: #007bff;
}

.pagination button:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

这些方法可以根据实际项目需求进行组合和调整,实现适合不同场景的分页功能。

标签: 分页如何用
分享给朋友:

相关文章

php实现的分页

php实现的分页

PHP 实现分页的方法 基本分页逻辑 分页的核心在于计算总页数、当前页码以及数据偏移量。假设每页显示 10 条数据: $current_page = isset($_GET['page']) ? (…

vue如何实现分页

vue如何实现分页

实现分页的基本思路 在Vue中实现分页通常需要结合后端API返回的分页数据和前端的分页组件。前端需要处理页码切换、数据请求和渲染逻辑。 后端API分页参数 后端API通常需要接收分页参数,例如pag…

vue搜索分页实现

vue搜索分页实现

Vue 搜索分页实现方法 基本思路 搜索分页通常需要结合后端API,前端通过Vue组件实现搜索框、分页器和数据列表的联动。核心逻辑包括:监听搜索输入变化、分页参数变化,触发数据请求并更新视图。 实现…

vue实现树形分页

vue实现树形分页

Vue 实现树形分页的方法 使用递归组件渲染树形结构 创建一个递归组件处理树形数据,通过 v-for 遍历子节点并动态渲染。组件需判断当前节点是否展开,并支持分页逻辑。 <templa…

vue实现页面段分页

vue实现页面段分页

实现分页的基本思路 在Vue中实现分页功能,通常需要以下几个关键部分:数据分片、页码控制、页面切换逻辑。分页的核心是根据当前页码和每页显示数量对数据进行切割。 数据分片处理 使用计算属性对原始数据进…

vue的分页怎么实现

vue的分页怎么实现

实现 Vue 分页的常见方法 使用第三方库(如 element-ui 或 vant) 安装 element-ui 分页组件: npm install element-ui 在组件中引入并使用:…