A ReactJS component to render a pagination.
By installing this component and writing only a little bit of CSS you can obtain this: Note: You should write your own css to obtain this UI. This package do not provide any css.
or
Install react-paginate
with npm:
npm install react-paginate --save
import React, { useEffect, useState } from 'react'; import ReactDOM from 'react-dom'; import ReactPaginate from 'react-paginate'; // Example items, to simulate fetching from another resources. const items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]; function Items({ currentItems }) { return ( <> {currentItems && currentItems.map((item) => ( <div> <h3>Item #{item}</h3> </div> ))} </> ); } function PaginatedItems({ itemsPerPage }) { // Here we use item offsets; we could also use page offsets // following the API or data you're working with. const [itemOffset, setItemOffset] = useState(0); // Simulate fetching items from another resources. // (This could be items from props; or items loaded in a local state // from an API endpoint with useEffect and useState) const endOffset = itemOffset + itemsPerPage; console.log(`Loading items from ${itemOffset} to ${endOffset}`); const currentItems = items.slice(itemOffset, endOffset); const pageCount = Math.ceil(items.length / itemsPerPage); // Invoke when user click to request another page. const handlePageClick = (event) => { const newOffset = (event.selected * itemsPerPage) % items.length; console.log( `User requested page number ${event.selected}, which is offset ${newOffset}` ); setItemOffset(newOffset); }; return ( <> <Items currentItems={currentItems} /> <ReactPaginate breakLabel="..." nextLabel="next >" onPageChange={handlePageClick} pageRangeDisplayed={5} pageCount={pageCount} previousLabel="< previous" renderOnZeroPageCount={null} /> </> ); } // Add a <div id="container"> to your HTML to see the component rendered. ReactDOM.render( <PaginatedItems itemsPerPage={4} />, document.getElementById('container') );
Test it on CodePen.
You can also read the code of demo/js/demo.js to quickly understand how to make react-paginate
work with a list of objects.
Finally there is this CodePen demo, with features fetching sample code (using GitHub API) and two synchronized pagination widgets.
Name Type DescriptionpageCount
Number
Required. The total number of pages. pageRangeDisplayed
Number
The range of pages displayed. marginPagesDisplayed
Number
The number of pages to display for margins. previousLabel
Node
Label for the previous
button. nextLabel
Node
Label for the next
button. breakLabel
Node
Label for ellipsis. breakAriaLabels
Shape
Aria labels of ellipsis elements (Default are { forward: 'Jump forward', backward: 'Jump backward' }
). breakClassName
String
The classname on tag li
of the ellipsis element. breakLinkClassName
String
The classname on tag a
of the ellipsis element. onPageChange
Function
The method to call when a page is changed. Exposes the current page object as an argument. onClick
Function
A callback for any click on the component. Exposes information on the part clicked (for eg. isNext
for next control), the next expected page nextSelectedPage
& others. Can return false
to prevent any page change or a number to override the page to jump to. onPageActive
Function
The method to call when an active page is clicked. Exposes the active page object as an argument. initialPage
Number
The initial page selected, in uncontrolled mode. Do not use with forcePage
at the same time. forcePage
Number
To override selected page with parent prop. Use this if you want to control the page from your app state. disableInitialCallback
boolean
Disable onPageChange
callback with initial page. Default: false
containerClassName
String
The classname of the pagination container. className
String
Same as containerClassName
. For use with styled-components & other CSS-in-JS. pageClassName
String
The classname on tag li
of each page element. pageLinkClassName
String
The classname on tag a
of each page element. pageLabelBuilder
Function
Function to set the text on page links. Defaults to (page) => page
activeClassName
String
The classname for the active page. It is concatenated to base class pageClassName
. activeLinkClassName
String
The classname on the active tag a
. It is concatenated to base class pageLinkClassName
. previousClassName
String
The classname on tag li
of the previous
button. nextClassName
String
The classname on tag li
of the next
button. previousLinkClassName
String
The classname on tag a
of the previous
button. nextLinkClassName
String
The classname on tag a
of the next
button. disabledClassName
String
The classname for disabled previous
and next
buttons. disabledLinkClassName
String
The classname on tag a
for disabled previous
and next
buttons. hrefBuilder
Function
The method is called to generate the href
attribute value on tag a
of each page element. hrefAllControls
Bool
By default the hrefBuilder
add href
only to active controls. Set this prop to true
so href
are generated on all controls (see). extraAriaContext
String
DEPRECATED: Extra context to add to the aria-label
HTML attribute. ariaLabelBuilder
Function
The method is called to generate the aria-label
attribute value on each page link eventListener
String
The event to listen onto before changing the selected page. Default is: onClick
. renderOnZeroPageCount
Function
A render function called when pageCount
is zero. Let the Previous / Next buttons be displayed by default (undefined
). Display nothing when null
is provided. prevRel
String
The rel
property on the a
tag for the prev page control. Default value prev
. Set to null
to disable. nextRel
String
The rel
propery on the a
tag for the next page control. Default value next
. Set to null
to disable. prevPageRel
String
The rel
property on the a
tag just before the selected page. Default value prev
. Set to null
to disable. selectedPageRel
String
The rel
propery on the a
tag for the selected page. Default value canonical
. Set to null
to disable. nextPageRel
String
The rel
property on the a
tag just after the selected page. Default value next
. Set to null
to disable.
To run the demo locally, clone the repository and move into it:
git clone git@github.com:AdeleD/react-paginate.git cd react-paginate
Install dependencies:
Prepare the demo:
Run the server:
Open your browser and go to http://localhost:3000/
See CONTRIBUTE.md
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4