封装一个react的分页组件
时间: 2023-05-24 10:02:51 浏览: 173
封装的分页插件
A:
在 React 中封装一个分页组件有多种实现方法,以下是其中一种常用的实现方式。
1. 新建一个 `Pagination` 组件:
```javascript
import React from 'react';
const Pagination = ({ currentPage, totalPages, onPageChange }) => {
// 当前页码小于等于 0 时,不显示分页组件
if (totalPages <= 0) {
return null;
}
// 渲染所有页码按钮
const pageButtons = [];
for (let i = 1; i <= totalPages; i++) {
pageButtons.push(
<button key={i} onClick={() => onPageChange(i)}>{i}</button>
);
}
return (
<div>
<button disabled={currentPage <= 1} onClick={() => onPageChange(currentPage - 1)}>Prev</button>
{pageButtons}
<button disabled={currentPage >= totalPages} onClick={() => onPageChange(currentPage + 1)}>Next</button>
</div>
);
};
export default Pagination;
```
2. 在父组件中使用 `Pagination` 组件:
```javascript
import React, { useState } from 'react';
import Pagination from './Pagination';
const itemsPerPage = 5;
const App = () => {
const [currentPage, setCurrentPage] = useState(1);
const [items, setItems] = useState([
{ id: 1, name: 'Item 1' },
{ id: 2, name: 'Item 2' },
{ id: 3, name: 'Item 3' },
{ id: 4, name: 'Item 4' },
{ id: 5, name: 'Item 5' },
{ id: 6, name: 'Item 6' },
{ id: 7, name: 'Item 7' },
{ id: 8, name: 'Item 8' },
{ id: 9, name: 'Item 9' },
{ id: 10, name: 'Item 10' },
{ id: 11, name: 'Item 11' },
]);
// 计算总页数
const totalPages = Math.ceil(items.length / itemsPerPage);
// 计算当前页需要显示哪些项
const startIndex = (currentPage - 1) * itemsPerPage;
const endIndex = startIndex + itemsPerPage;
const itemsToShow = items.slice(startIndex, endIndex);
// 当页码改变时更新当前页码
const handlePageChange = (newPage) => {
setCurrentPage(newPage);
};
return (
<div>
{/* 渲染当前页的数据 */}
<ul>
{itemsToShow.map((item) => (
<li key={item.id}>{item.name}</li>
))}
</ul>
{/* 渲染分页组件 */}
<Pagination currentPage={currentPage} totalPages={totalPages} onPageChange={handlePageChange} />
</div>
);
};
export default App;
```
这个例子中,我们首先定义了每页显示的项目数为 5,然后根据当前页码计算需要显示哪些项目。在渲染分页组件时,我们将当前页码、总页数以及当页码改变时触发的回调函数传递给 `Pagination` 组件。在 `Pagination` 组件内部,我们通过循环生成所有页码按钮,并在点击页码按钮时调用 `onPageChange` 回调函数来更新当前页码。最后,我们在父组件中根据当前页码计算需要显示哪些项目,并将它们渲染在页面上。
阅读全文