当前位置:首页 > 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
分享给朋友:

相关文章

vue 分页 实现

vue 分页 实现

Vue 分页实现方法 使用第三方库(如 Element UI) Element UI 提供了现成的分页组件 el-pagination,适合快速集成。 安装 Element UI: npm i…

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

分页用vue实现

分页用vue实现

分页用 Vue 实现 在 Vue 中实现分页功能通常需要结合数据管理和 UI 组件。以下是几种常见的方法: 使用 Vue 组件库的分页组件 许多 Vue UI 组件库(如 Element UI、V…

vue实现选项卡分页

vue实现选项卡分页

实现选项卡分页的基本思路 在Vue中实现选项卡分页功能,可以通过动态组件或条件渲染结合数据绑定完成。核心逻辑是维护一个当前激活的选项卡状态,根据用户点击切换内容。 使用v-if条件渲染 通过v-i…

react native 如何

react native 如何

React Native 开发基础 React Native 是一个用于构建跨平台移动应用的框架,允许开发者使用 JavaScript 和 React 编写代码,同时生成原生 iOS 和 Androi…

react 如何执行

react 如何执行

安装 Node.js 和 npm React 开发需要 Node.js 环境,因为它提供了 npm(或 yarn)包管理工具。从 Node.js 官网 下载并安装最新 LTS 版本。安装完成后,在终端…