react-paginating
Simple, lightweight, flexible pagination ReactJS component.
The component applied Function as Child Components
pattern.
This approach allows you to fully control UI component and behaviours.
Installation
npm install --save react-paginating
or
yarn add react-paginating
Usage
import React from 'react';
import { render } from 'react-dom';
import Pagination from 'react-paginating';
const fruits = [
['apple', 'orange'],
['banana', 'avocado'],
['coconut', 'blueberry'],
['payaya', 'peach'],
['pear', 'plum']
];
const limit = 2;
const pageCount = 3;
const total = fruits.length * limit;
class App extends React.Component {
constructor() {
super();
this.state = {
currentPage: 1
};
}
handlePageChange = page => {
this.setState({
currentPage: page
});
};
render() {
const { currentPage } = this.state;
return (
<div>
<ul>
{fruits[currentPage - 1].map(item => <li key={item}>{item}</li>)}
</ul>
<Pagination
total={total}
limit={limit}
pageCount={pageCount}
currentPage={currentPage}
>
{({
pages,
currentPage,
hasNextPage,
hasPreviousPage,
previousPage,
nextPage,
totalPages,
getPageItemProps
}) => (
<div>
<button
{...getPageItemProps({
pageValue: 1,
onPageChange: this.handlePageChange
})}
>
first
</button>
{hasPreviousPage && (
<button
{...getPageItemProps({
pageValue: previousPage,
onPageChange: this.handlePageChange
})}
>
{'<'}
</button>
)}
{pages.map(page => {
let activePage = null;
if (currentPage === page) {
activePage = { backgroundColor: '#fdce09' };
}
return (
<button
key={page}
style={activePage}
{...getPageItemProps({
pageValue: page,
onPageChange: this.handlePageChange
})}
>
{page}
</button>
);
})}
{hasNextPage && (
<button
{...getPageItemProps({
pageValue: nextPage,
onPageChange: this.handlePageChange
})}
>
{'>'}
</button>
)}
<button
{...getPageItemProps({
pageValue: totalPages,
onPageChange: this.handlePageChange
})}
>
last
</button>
</div>
)}
</Pagination>
</div>
);
}
}
render(<App />, document.getElementById('root'));