当前位置:首页 > React

react 实现分页

2026-01-26 11:31:29React

实现分页的基本思路

在React中实现分页通常需要以下几个核心部分:当前页码状态管理、数据分片逻辑、分页控件渲染。以下是具体实现方法。

定义分页状态

使用React的useState钩子管理当前页码和每页显示数量。通常需要存储当前页码(currentPage)和每页数据量(itemsPerPage)。

const [currentPage, setCurrentPage] = useState(1);
const [itemsPerPage] = useState(10);

计算分页数据

根据当前页码和每页数据量,从完整数据中切片获取当前页的数据。假设有一个数据数组data

const indexOfLastItem = currentPage * itemsPerPage;
const indexOfFirstItem = indexOfLastItem - itemsPerPage;
const currentItems = data.slice(indexOfFirstItem, indexOfLastItem);

渲染分页控件

创建一个分页导航组件,允许用户切换页码。通常包括页码按钮和前进/后退按钮:

react 实现分页

const Pagination = ({ itemsPerPage, totalItems, paginate }) => {
  const pageNumbers = [];

  for (let i = 1; i <= Math.ceil(totalItems / itemsPerPage); i++) {
    pageNumbers.push(i);
  }

  return (
    <nav>
      <ul className="pagination">
        {pageNumbers.map(number => (
          <li key={number} className="page-item">
            <a onClick={() => paginate(number)} href="#" className="page-link">
              {number}
            </a>
          </li>
        ))}
      </ul>
    </nav>
  );
};

完整组件示例

将上述逻辑整合到一个完整组件中:

import React, { useState } from 'react';

const PaginatedList = ({ data }) => {
  const [currentPage, setCurrentPage] = useState(1);
  const [itemsPerPage] = useState(5);

  const indexOfLastItem = currentPage * itemsPerPage;
  const indexOfFirstItem = indexOfLastItem - itemsPerPage;
  const currentItems = data.slice(indexOfFirstItem, indexOfLastItem);

  const paginate = pageNumber => setCurrentPage(pageNumber);

  return (
    <div>
      <ul>
        {currentItems.map(item => (
          <li key={item.id}>{item.name}</li>
        ))}
      </ul>
      <Pagination
        itemsPerPage={itemsPerPage}
        totalItems={data.length}
        paginate={paginate}
      />
    </div>
  );
};

const Pagination = ({ itemsPerPage, totalItems, paginate }) => {
  const pageNumbers = [];

  for (let i = 1; i <= Math.ceil(totalItems / itemsPerPage); i++) {
    pageNumbers.push(i);
  }

  return (
    <nav>
      <ul className="pagination">
        {pageNumbers.map(number => (
          <li key={number} className="page-item">
            <a onClick={() => paginate(number)} href="#" className="page-link">
              {number}
            </a>
          </li>
        ))}
      </ul>
    </nav>
  );
};

export default PaginatedList;

高级优化

对于大数据量或复杂场景,可以考虑以下优化:

react 实现分页

添加上一页/下一页按钮,提升用户体验:

<button 
  onClick={() => setCurrentPage(prev => (prev > 1 ? prev - 1 : prev))}
  disabled={currentPage === 1}
>
  Previous
</button>

<button
  onClick={() => setCurrentPage(prev => 
    (prev < Math.ceil(data.length / itemsPerPage) ? prev + 1 : prev)
  )}
  disabled={currentPage === Math.ceil(data.length / itemsPerPage)}
>
  Next
</button>

实现跳转到指定页码的输入框:

const [goToPage, setGoToPage] = useState('');

const handleGoToPage = e => {
  e.preventDefault();
  const page = parseInt(goToPage);
  if (page >= 1 && page <= Math.ceil(data.length / itemsPerPage)) {
    setCurrentPage(page);
  }
};

// 在渲染中添加
<form onSubmit={handleGoToPage}>
  <input
    type="number"
    value={goToPage}
    onChange={e => setGoToPage(e.target.value)}
    min="1"
    max={Math.ceil(data.length / itemsPerPage)}
  />
  <button type="submit">Go</button>
</form>

使用现有库

对于快速实现,可以考虑使用现成的React分页库,如react-paginate

import ReactPaginate from 'react-paginate';

// 在组件中使用
<ReactPaginate
  pageCount={Math.ceil(data.length / itemsPerPage)}
  onPageChange={({ selected }) => setCurrentPage(selected + 1)}
  containerClassName={'pagination'}
  activeClassName={'active'}
/>

这种方法提供了现成的样式和交互功能,适合需要快速开发的场景。

标签: 分页react
分享给朋友:

相关文章

电脑如何安装react

电脑如何安装react

安装 Node.js 和 npm React 项目依赖 Node.js 环境,需先安装 Node.js(自带 npm)。访问 Node.js 官网 下载 LTS 版本,运行安装程序并完成配置。安装后,…

react 如何引入jquery

react 如何引入jquery

安装 jQuery 库 在 React 项目中引入 jQuery 的第一步是安装 jQuery。可以通过 npm 或 yarn 安装: npm install jquery # 或 yarn a…

vue实现页面分页

vue实现页面分页

Vue实现页面分页的方法 使用Element UI的分页组件 Element UI提供了现成的分页组件el-pagination,可以快速实现分页功能。需要先安装Element UI库。 <…

vue 分页的实现

vue 分页的实现

Vue 分页的实现方法 使用 Element UI 的分页组件 安装 Element UI: npm install element-ui 在 Vue 项目中引入 Element UI 的分页组件:…

vue实现后台分页

vue实现后台分页

实现后台分页的方法 在Vue中实现后台分页通常需要结合前端和后端逻辑,后端负责处理数据分页,前端负责展示分页数据和交互。以下是具体实现方法: 后端API设计 后端需要提供支持分页的API接口,通常包…

vue实现下拉分页思想

vue实现下拉分页思想

实现下拉分页的基本思想 下拉分页(Infinite Scroll)是一种常见的分页加载方式,当用户滚动到页面底部时自动加载下一页数据。Vue 中可以通过监听滚动事件或使用第三方库实现。 监听滚动事…