Skip to content
Bagas' Hideout

Membuat Pagination pada React

Teknis2 min read

Tulisan ini dibuat setelah saya mencoba mencari tahu tentang cara membuat pagination atau paginasi untuk project yang sedang saya kerjakan. Project yang sedang saya kerjakan saat ini dibangun dengan menggunakan React. Kemudian saya menemukan sebuah artikel di medium dan mencoba untuk membuat ulang berdasarkan yang disebutkan pada artikel tersebut.

Pada artikel yang saya temukan, caranya dijelaskan dalam dua konsep yakni dengan menggunakan class component dan functional component. Disini saya akan mencoba untuk menjelaskan yang menggunakan functional component saja, sesuai dengan yang saya gunakan pada project saya.

Requirements

  • axios
  • react-paginate

Steps

Langkah pertama yang dilakukan sudah pasti membuat project baru dengan menggunakan create-react-app dan menginstall axios serta react-paginate.

npx create-react-app pagination-app

npm install axios react-paginate

Kemudian buat file baru dengan nama PaginationPlayground atau apapun yang ada di kepala kalian dan import hooks serta modul yang dibutuhkan yaitu react-paginate dan axios.

1import React, {useState, useEffect} from 'react'
2import axios from 'axios'
3import ReactPaginate from 'react-paginate'

Setelah itu buat functional component dan buat beberapa state menggunakan useState hook di dalamnya.

1const [offset, setOffset] = useState(0)
2const [data, setData] = useState([])
3const [perPage] = useState(5)
4const [pageCount, setPageCount] = useState(0)

Jadi variabel offset digunakan untuk menentukan offset, variabel data untuk menyimpan data yang diambil dari dummy API, variabel perPage untuk menentukan jumlah item yang akan ditampilkan dalam satu halaman, dan yang terakhir adalah pageCount yang digunakan untuk menyimpan nilai jumlah halaman berdasarkan data yang didapat dibagi jumlah data yang ditampilkan dalam satu halaman.

Kemudian buat fungsi getData untuk load data yang diambil dari dummy API secara asinkronus menggunakan Axios. Dummy API-nya disini menggunakan JSONPlaceholder API, data yang akan diambil berupa 5000 gambar yang dibungkus dalam sebuah array. Di bawah ini adalah baris kode yang ada di dalam fungsi getData.

1const getData = async() => {
2 const res = await axios.get(`https://jsonplaceholder.typicode.com/photos`)
3 const data = res.data
4
5 const slicedData = data.slice(offset, offset + perPage)
6 const postData = slicedData.map(pd =>
7 <div key={pd.id}>
8 <p>{pd.title}</p>
9 <img src={pd.thumbnailUrl} alt={pd.title} />
10 </div>
11 )
12 setData(postData)
13 setPageCount(Math.ceil(data.length / perPage))
14}

Operasi yang dilakukan pada fungsi getData diawali dengan fetching data menggunakan axios dan setelah mendapatkan data selanjutnya passing data ke dalam variabal data. Setelah itu, menggunakan array.slice milik javascript untuk slicing data tersebut, kurang lebih keterangan operasinya adalah seperti ini 5000array.slice(0, 0 + 10).

Setelah slicing data, selanjutnya adalah me-looping data tersebut menggunakan array.map milik javascript untuk memasukkan data tersebut ke dalam variabel postData. Fungsi getData juga mengupdate state dari variabel data menggunakan setData dengan variabel postData sebagai parameter.

Serta mengupdate state dari pageCount menggunakan setPageCount yang berisi sebuah fungsi yakni Math.ceil(5000/5).

Setelah selesai dibuat, kemudian fungsi getData dipanggil di dalam useEffect.

1useEffect(() => {
2 getData()
3}, [offset])

Lalu membuat fungsi untuk menghandle event ketika menekan tombol prev dan next pada paginasi dibuat yaitu handlePageClick.

1const handlePageClick = (e) => {
2 const selectedPage = e.selected
3 setOffset(selectedPage * perPage)
4}

Fungsi ini akan mengupdate state dari offset, caranya adalah mengalikan nilai dari selectedPage dengan nilai dari perPage pada setiap klik yang dilakukan menggunakan setOffset.

Langkah selanjutnya yang dilakukan adalah me-return state dari variabel data dan membuat tag ReactPaginate yang sebelumnya diimport dari react-paginate.

1return (
2 <div className="App">
3 {data}
4 <ReactPaginate
5 previousLabel={"prev"}
6 nextLabel={"next"}
7 breakLabel={"..."}
8 breakClassName={"break-me"}
9 pageCount={pageCount}
10 marginPagesDisplayed={2}
11 pageRangeDisplayed={5}
12 onPageChange={handlePageClick}
13 containerClassName={"pagination"}
14 subContainerClassName={"pages pagination"}
15 activeClassName={"active"}
16 />
17 </div>
18)

Lastly, import dan deklarasikan komponen pagination yang sudah dibuat ini di dalam file app.js. Jalankan project ini di local environment dengan mengeksekusi perintah npm start pada terminal kesayangan dan silahkan lihat hasilnya di browser kesayanganmu.

Itu tadi adalah langkah-langkah dalam membuat fitur paginasi atau pagination di dalam React dengan bantuan modul react-paginate pada functional component. Thanks udah baca sampe abis, kalo masih bingung bisa langsung dm aja di sini buat diskusi lebih lanjut. Have a nice day!