pagination Library를 이용한 목록 구현
pagination Library는 여러가지가 있는데그중 가장 많은 다운로드를한 라이브러리는 react-js-pagination 입니다.
이걸 이용해서 게시판 글목록 비슷(?)한걸 구현할수 있습니다.
먼저 프로젝트 폴더를 연다음 터미널에 다운로드 명령어를 입력해서 라이브러리를 다운로드
npm
npm install react-js-pagination
yarn
yarn add react-js-pagination
다운로드한 라이브러리를 import한후 몇가지 설정해주면 사용할수 있습니다
<Pagination
// 현제 보고있는 페이지
activePage={1}
// 한페이지에 출력할 아이템수
itemsCountPerPage={5}
// 총 아이템수
totalItemsCount={300}
// 표시할 페이지수
pageRangeDisplayed={5}
// 함수
onChange={handlePageChange}>
</Pagination>
매개변수
이름 | 유형 | 기본 | 설명 |
---|---|---|---|
totalItemsCount | Number | *필수 표시할 총 항목 수 | |
onChange | Function | *필수 페이지 변경 핸들러. pageNumber를 인수로 수신 | |
activePage | Number | 1 | *필수 활성 페이지 |
itemsCountPerPage | Number | 10 | 페이지당 항목 수 |
pageRangeDisplayed | Number | 5 | 페이지네이터의 페이지 범위, 탐색 블록 제외(이전, 다음, 첫 번째, 마지막 페이지) |
prevPageText | String / ReactElement | ⟨ | 이전 페이지 탐색 버튼의 텍스트 |
firstPageText | String / ReactElement | « | 첫 페이지 탐색 버튼의 텍스트 |
lastPageText | String / ReactElement | » | 마지막 페이지 탐색 버튼의 텍스트 |
nextPageText | String / ReactElement | ⟩ | 다음 페이지 탐색 버튼의 텍스트 |
getPageUrl | Function | 페이지에 대한 href 속성 생성 | |
innerClass | String | pagination | <ul> 태그 의 클래스 이름 |
activeClass | String | active | <li> 활성 태그 의 클래스 이름 |
activeLinkClass | String | <a> 활성 태그 의 클래스 이름 | |
itemClass | String | <li> 태그 의 기본 클래스 | |
itemClassFirst | String | <li> 첫 번째 태그 의 클래스 | |
itemClassPrev | String | <li> 이전 태그 의 클래스 | |
itemClassNext | String | 다음 <li> 태그 의 클래스 | |
itemClassLast | String | 마지막 <li> 태그 의 클래스 | |
disabledClass | String | disabled | <li> 비활성화 된 경우 첫 번째, 이전, 다음 및 마지막 태그의 클래스 이름 |
hideDisabled | Boolean | false | 비활성화된 탐색 버튼(이전, 다음, 처음, 마지막)을 숨깁니다. |
hideNavigation | Boolean | false | 탐색 버튼 숨기기(이전 페이지, 다음 페이지) |
hideFirstLastPages | Boolean | false | 첫 번째/마지막 탐색 버튼 숨기기 |
linkClass | String | 태그 의 기본 클래스 | |
linkClassFirst | String | 첫 번째 태그 의 클래스 | |
linkClassPrev | String | 이전 태그 의 클래스 | |
linkClassNext | String | 다음 태그 의 클래스 | |
linkClassLast | String | 마지막 태그 의 클래스 |
출력화면
스타일링후 출력화면
import Pagination from 'react-js-pagination'
import styled from 'styled-components'
const AxiosPost = () => {
const handlePageChange = (page) => { setPage(page); };
return (
<div>
<h2>API 연습</h2>
<PaginationBox>
<Pagination
activePage={1}
itemsCountPerPage={5}
totalItemsCount={300}
pageRangeDisplayed={5}
onChange={handlePageChange}>
</Pagination>
</PaginationBox>
</div>
)
}
const PaginationBox = styled.div`
.pagination { display: flex; justify-content: center; margin-top: 15px;}
ul { list-style: none; padding: 0; }
ul.pagination li {
display: inline-block;
width: 30px;
height: 30px;
border: 1px solid #e2e2e2;
display: flex;
justify-content: center;
align-items: center;
font-size: 1rem;
}
ul.pagination li:first-child{ border-radius: 5px 0 0 5px; }
ul.pagination li:last-child{ border-radius: 0 5px 5px 0; }
ul.pagination li a { text-decoration: none; color: #337ab7; font-size: 1rem; }
ul.pagination li.active a { color: white; }
ul.pagination li.active { background-color: #337ab7; }
ul.pagination li a:hover,
ul.pagination li a.active { color: blue; }
`
export default AxiosPost
API post적용글에서 작성한 코드에 적용해보면
AxiosPost
import axios from 'axios'
import {useState} from 'react'
import Pagination from 'react-js-pagination'
import styled from 'styled-components'
const AxiosPost = () => {
const [data, setData] = useState([]);
const [page, setPage] = useState(1);
const [items, setItems] = useState(5);
const getClick = () => {
axios.get('https://jsonplaceholder.typicode.com/posts')
.then(res => setData(res.data))
}
const postClick = () => {
axios.post('https://jsonplaceholder.typicode.com/posts',{
userId :11,
id:101,
body:'test body',
title:'test title'
})
.then(res => console.log(res.data))
}
const handlePageChange = (page) => { setPage(page); };
const itemChange = (e) => {
setItems(Number(e.target.value))
}
console.log(items*(page-1), items*(page-1)+items)
return (
<div>
<h2>API 연습</h2>
<div>
<button onClick={getClick}>Get</button>
<button onClick={postClick}>Post</button>
<select name="items" onChange={itemChange}>
<option value="5">5개</option>
<option value="10">10개</option>
<option value="15">15개</option>
<option value="20">20개</option>
</select>
</div>
{data.slice(
items*(page-1),
items*(page-1)+items
).map((v,i) => {
return (
<div key={i}>
<h3>{v.title}</h3>
<div>userId = {v.userId}, id = {v.id}</div>
<div>{v.body}</div>
</div>
)
})}
<PaginationBox>
<Pagination
activePage={page}
itemsCountPerPage={items}
totalItemsCount={data.length-1}
pageRangeDisplayed={5}
onChange={handlePageChange}>
</Pagination>
</PaginationBox>
</div>
)
}
const PaginationBox = styled.div`
.pagination { display: flex; justify-content: center; margin-top: 15px;}
ul { list-style: none; padding: 0; }
ul.pagination li {
display: inline-block;
width: 30px;
height: 30px;
border: 1px solid #e2e2e2;
display: flex;
justify-content: center;
align-items: center;
font-size: 1rem;
}
ul.pagination li:first-child{ border-radius: 5px 0 0 5px; }
ul.pagination li:last-child{ border-radius: 0 5px 5px 0; }
ul.pagination li a { text-decoration: none; color: #337ab7; font-size: 1rem; }
ul.pagination li.active a { color: white; }
ul.pagination li.active { background-color: #337ab7; }
ul.pagination li a:hover,
ul.pagination li a.active { color: blue; }
`
export default AxiosPost
결과 영상
이미지 클릭(영상 링크)
Author And Source
이 문제에 관하여(pagination Library를 이용한 목록 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dltmdwls15/pagination-Library를-이용한-목록-구현저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)