当前位置:首页 > React

react实现前端分页

2026-01-27 07:39:23React

实现前端分页的基本思路

前端分页的核心在于将全部数据一次性加载到前端,通过JavaScript控制当前页的数据展示。React中可以通过状态管理当前页码和每页数据量,利用数组切片实现数据分页。

基本实现步骤

安装React项目基础依赖(如未创建)

npx create-react-app pagination-demo
cd pagination-demo

创建分页组件

import { useState } from 'react';

function Pagination({ data, itemsPerPage }) {
  const [currentPage, setCurrentPage] = useState(1);
  const totalPages = Math.ceil(data.length / itemsPerPage);

  const getCurrentData = () => {
    const startIndex = (currentPage - 1) * itemsPerPage;
    const endIndex = startIndex + itemsPerPage;
    return data.slice(startIndex, endIndex);
  };

  const handlePageChange = (page) => {
    setCurrentPage(page);
  };

  return (
    <div>
      <ul>
        {getCurrentData().map((item, index) => (
          <li key={index}>{item}</li>
        ))}
      </ul>

      <div>
        {Array.from({ length: totalPages }, (_, i) => i + 1).map((page) => (
          <button
            key={page}
            onClick={() => handlePageChange(page)}
            disabled={page === currentPage}
          >
            {page}
          </button>
        ))}
      </div>
    </div>
  );
}

使用分页组件

function App() {
  const mockData = Array.from({ length: 100 }, (_, i) => `Item ${i + 1}`);

  return (
    <div>
      <h1>前端分页示例</h1>
      <Pagination data={mockData} itemsPerPage={10} />
    </div>
  );
}

优化分页组件

添加分页导航增强功能

const PaginationControls = ({ currentPage, totalPages, onPageChange }) => (
  <div>
    <button 
      onClick={() => onPageChange(1)} 
      disabled={currentPage === 1}
    >
      首页
    </button>

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

    {Array.from({ length: totalPages }, (_, i) => i + 1).map(page => (
      <button
        key={page}
        onClick={() => onPageChange(page)}
        disabled={page === currentPage}
      >
        {page}
      </button>
    ))}

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

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

性能优化建议

对于大数据量情况,考虑以下优化方案:

虚拟滚动技术替代分页

import { FixedSizeList } from 'react-window';

function VirtualList({ data }) {
  return (
    <FixedSizeList
      height={400}
      width={300}
      itemSize={50}
      itemCount={data.length}
    >
      {({ index, style }) => (
        <div style={style}>
          {data[index]}
        </div>
      )}
    </FixedSizeList>
  );
}

分页器样式优化方案

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

.pagination button[disabled] {
  color: #999;
  cursor: not-allowed;
}

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

完整示例整合

将上述组件组合成完整解决方案:

react实现前端分页

import { useState } from 'react';
import './Pagination.css';

function Pagination({ data, itemsPerPage = 10 }) {
  const [currentPage, setCurrentPage] = useState(1);
  const totalPages = Math.ceil(data.length / itemsPerPage);

  const getCurrentData = () => {
    const startIndex = (currentPage - 1) * itemsPerPage;
    const endIndex = startIndex + itemsPerPage;
    return data.slice(startIndex, endIndex);
  };

  return (
    <div className="pagination-container">
      <ul className="data-list">
        {getCurrentData().map((item, index) => (
          <li key={index} className="data-item">{item}</li>
        ))}
      </ul>

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

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

相关文章

vue实现下拉分页思想

vue实现下拉分页思想

实现下拉分页的核心思想 下拉分页(无限滚动)的核心是通过监听滚动事件,在用户滚动到接近底部时自动加载下一页数据。Vue中可以通过结合v-for渲染列表、计算滚动位置以及管理分页状态来实现。 监听滚动…

react native如何启动

react native如何启动

如何启动 React Native 项目 安装 Node.js 和 npm 确保已安装 Node.js(建议版本 16 或更高)和 npm(Node.js 自带)。可通过以下命令检查版本: node…

如何评价react native

如何评价react native

React Native 的优势 跨平台开发效率高:基于 JavaScript 和 React 语法,可同时开发 iOS 和 Android 应用,减少重复代码量。性能接近原生:通过原生组件渲染,性能…

react中monent如何获取日期

react中monent如何获取日期

使用 Moment.js 获取当前日期 在 React 中通过 Moment.js 获取当前日期,可以直接调用 moment() 函数。它会返回包含当前日期和时间的 Moment 对象。 impor…

react 如何执行

react 如何执行

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

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…