Altcademy - a Forbes magazine logo Best Coding Bootcamp 2023

How to do pagination in ReactJS

Introduction

Hello, future code wizards! Today, we’ll be diving into the world of ReactJS, specifically focusing on a key feature of modern web applications - Pagination. If you've ever browsed through an eCommerce website or scrolled through your Facebook feed, you've already experienced pagination. It's a way to split large amounts of data or content into manageable chunks, allowing users to navigate through pages or sections without overwhelming their devices or their patience.

Now, you might be wondering, "What in the world is ReactJS?" Well, ReactJS (commonly just referred to as React) is a JavaScript library for building user interfaces. It's developed and maintained by Facebook, and it's widely used in modern web development. For our purposes, you can think of it as the magical spellbook that lets us conjure up interactive web features like pagination.

Understanding Pagination

Before we get our hands dirty with code, let's make sure we understand the concept of pagination. Imagine you have a book, but instead of having chapters and pages, all the words are just crammed into one giant page. That's going to be pretty hard to read, right? Pagination is like splitting that giant page into smaller, readable pages or chapters. Instead of loading all the data at once, we load a portion of it, and when the user wants to see more, we load the next portion.

Setting up the Project

For our tutorial, we'll need a React application. If you haven't already, install Node.js and npm (Node Package Manager) on your computer. These are the basic tools we need to create a React application. Once you have these installed, open up your terminal or command prompt and type the following command to create a new React application:

npx create-react-app pagination-demo

This will create a new directory called pagination-demo with a basic React application inside it.

Installing Dependencies

For our pagination, we'll use a package called react-paginate. This package provides a set of components and utilities that make it easy to build pagination in a React application. To install it, navigate to your project directory in the terminal and run the following command:

npm install react-paginate

Understanding the Code Structure

Before we start writing our pagination code, let's familiarize ourselves with the basic structure of our React application. If you open the pagination-demo directory in your favorite code editor, you'll see several files and folders. The most important one for us is the src folder. This is where we'll write all our React code.

Inside the src folder, you'll find a file called App.js. This is the main component of our React application, and it's where we'll add our pagination code.

Fetching Data

Before we can paginate our data, we need to have some data to paginate! In a real-world application, this data might come from a database or an API, but for simplicity, we'll use a static data array for our tutorial. Let's create a new file in the src folder called data.js, and fill it with some data:

export const data = Array.from({ length: 100 }, (v, k) => k + 1);

This code creates an array with 100 numbers, from 1 to 100. We'll use these numbers as our data for pagination.

Creating the Pagination Component

Now it's time for the fun part - creating our pagination component! In the src folder, create a new file called Pagination.js. This will be our pagination component. Start by importing React and the react-paginate package:

import React from 'react';
import ReactPaginate from 'react-paginate';

Next, let's define our Pagination component. For now, it will just display a simple message:

function Pagination() {
    return (
        <div>
            <h2>Pagination goes here!</h2>
        </div>
    );
}

export default Pagination;

Connecting Pagination Component to our Data

In order to paginate our data, we need to connect our Pagination component to it. We'll do this in our App.js file. First, import the Pagination component and the data array at the top of the file:

import React from 'react';
import Pagination from './Pagination';
import { data } from './data';

Then, inside the App component, render the Pagination component and pass the data as a prop:

function App() {
    return (
        <div className="App">
            <Pagination data={data} />
        </div>
    );
}

export default App;

Implementing Pagination Logic

Now that we have our data and our pagination component set up, we can implement the pagination logic. This involves two steps: slicing the data into pages, and switching between pages when the user clicks the pagination controls.

First, let's add some state to our Pagination component to keep track of the current page. We'll use the useState hook from React for this. At the top of the Pagination component, add the following code:

const [currentPage, setCurrentPage] = React.useState(0);

This code creates a state variable currentPage and a function setCurrentPage to update it. The initial value is 0, which represents the first page.

Next, let's slice our data into pages. We'll define a constant PER_PAGE to determine how many items to show per page, and use the slice method to get the data for the current page:

const PER_PAGE = 10;
const offset = currentPage * PER_PAGE;
const currentPageData = data
    .slice(offset, offset + PER_PAGE)
    .map((item) => <p>{item}</p>);

Finally, we'll use the ReactPaginate component from react-paginate to display the pagination controls. This component takes several props, including pageCount (the total number of pages), pageRangeDisplayed (the number of pages to show in the pagination controls), and onPageChange (a function to call when the user clicks a page number). We'll calculate the total number of pages based on the size of our data and the number of items per page, and define a function handlePageClick to update the current page when the user clicks a page number:

const pageCount = Math.ceil(data.length / PER_PAGE);

function handlePageClick({ selected: selectedPage }) {
    setCurrentPage(selectedPage);
}

return (
    <div>
        {currentPageData}
        <ReactPaginate
            previousLabel={"← Previous"}
            nextLabel={"Next →"}
            pageCount={pageCount}
            onPageChange={handlePageClick}
            containerClassName={"pagination"}
            previousLinkClassName={"pagination__link"}
            nextLinkClassName={"pagination__link"}
            disabledClassName={"pagination__link--disabled"}
            activeClassName={"pagination__link--active"}
        />
    </div>
);

And there you have it - basic pagination in React! With just a few lines of code, we've created a pagination system that can handle any amount of data. It's like having a magic wand that can split a giant book into readable chapters.

Conclusion

Pagination is a fundamental feature of most web applications, and React makes it easy to implement with libraries like react-paginate. While we've covered the basics in this post, there's a lot more you can do with pagination in React - like adding custom styles, loading data from an API, or even creating your own pagination component from scratch. So keep practicing, keep experimenting, and keep coding!