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 | Description | 
|---|---|---|
| pageCount | 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 previousbutton. | 
| nextLabel | Node | Label for the nextbutton. | 
| 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 liof the ellipsis element. | 
| breakLinkClassName | String | The classname on tag aof 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. isNextfor next control), the next expected pagenextSelectedPage& others. Can returnfalseto 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 forcePageat 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 onPageChangecallback 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 liof each page element. | 
| pageLinkClassName | String | The classname on tag aof 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 classpageLinkClassName. | 
| previousClassName | String | The classname on tag liof thepreviousbutton. | 
| nextClassName | String | The classname on tag liof thenextbutton. | 
| previousLinkClassName | String | The classname on tag aof thepreviousbutton. | 
| nextLinkClassName | String | The classname on tag aof thenextbutton. | 
| disabledClassName | String | The classname for disabled previousandnextbuttons. | 
| disabledLinkClassName | String | The classname on tag afor disabledpreviousandnextbuttons. | 
| hrefBuilder | Function | The method is called to generate the hrefattribute value on tagaof each page element. | 
| hrefAllControls | Bool | By default the hrefBuilderaddhrefonly to active controls. Set this prop totruesohrefare generated on all controls (see). | 
| extraAriaContext | String | DEPRECATED: Extra context to add to the aria-labelHTML attribute. | 
| ariaLabelBuilder | Function | The method is called to generate the aria-labelattribute 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 pageCountis zero. Let the Previous / Next buttons be displayed by default (undefined). Display nothing whennullis provided. | 
| prevRel | String | The relproperty on theatag for the prev page control. Default valueprev. Set tonullto disable. | 
| nextRel | String | The relpropery on theatag for the next page control. Default valuenext. Set tonullto disable. | 
| prevPageRel | String | The relproperty on theatag just before the selected page. Default valueprev. Set tonullto disable. | 
| selectedPageRel | String | The relpropery on theatag for the selected page. Default valuecanonical. Set tonullto disable. | 
| nextPageRel | String | The relproperty on theatag just after the selected page. Default valuenext. Set tonullto disable. | 
To run the demo locally, clone the repository and move into it:
git clone git@github.com:AdeleD/react-paginate.git
cd react-paginateInstall dependencies:
npm installPrepare the demo:
npm run demoRun the server:
npm run serveOpen your browser and go to http://localhost:3000/
See CONTRIBUTE.md



