ํ์ด์ง๋ค์ด์ ? ๋ฌดํ ์คํฌ๋กค?
ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ๊ฒ์๊ธ ์ฝํ ์ธ ์๊ฐ ๋๋ฌด ๋ง์์ง ๊ฒฝ์ฐ๋ฅผ ๋๋นํด์ ํ์ด์ง๋ค์ด์ ์ด๋ ๋ฌดํ์คํฌ๋กค์ ์ ์ฉํด๋ณด๊ธฐ๋ก ํ๋ค.
๊ฒ์๊ธ ํน์ฑ์, ํ๋จ์ ๊ธ์ฐ๊ธฐ ๋ฒํผ์ด ํญ์ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฌดํ์คํฌ๋กค๋ณด๋ค๋ ํ์ด์ง๋ค์ด์ ์ด ๋ ์ ํฉํ๊ฒ ๋ค๋ ์๊ฐ์ผ๋ก!..
ํ์ด์ง๋ค์ด์ ์ ๊ตฌํํด๋ณด๊ธฐ๋ก ํ๋ค.
MUI์ Pagination ์ปดํฌ๋ํธ
MUI์์ ํ์ด์ง๋ค์ด์ ์ปดํฌ๋ํธ๋ฅผ ๊ฒ์ํ๋ฉด ๋ค์ํ ์คํ์ผ์ ํ์ด์ง๋ค์ด์ ์ปดํฌ๋ํธ๋ฅผ ํ์ธํ ์ ์๋ค.
https://mui.com/material-ui/react-pagination/#main-content
ํ์ฌ ํ๋ก์ ํธ UI๋ ๊ต์ฅํ ๊น๋ํ ํธ์ด๊ธฐ ๋๋ฌธ์ ๋ฒ ์ด์งํ ์ปดํฌ๋ํธ๋ฅผ ์ ์ฉํ๊ธฐ๋ก..
MUI์์ ์ ๊ณตํ๋ ํ์ด์ง๋ค์ด์ ์๋ ์น๋ช ์ ์ธ ๋จ์ ์ด ํ๋ ์๋๋ฐ, ํ์ด์ง๊ฐ ๋ง์ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด ํ์ด์ง๊ฐ ํ์๋๋ค๋ ์ ์ด๋ค.
๐ค ํ์ด์ง๋ฅผ ์ด๋ฐ์์ผ๋ก ํ์ํ๋ค๋? ์ข ๋นํฉ์ค๋ฌ์..
์ด ๋๋ฌธ์ MUI๋ฅผ ์ด์ฉํ์ง ์๋ ๋ถ๋ค๋ ๋ง์ ๊ฒ ๊ฐ๋ค. (๊ฒ์ํด ๋ณด๊ธฐ์)
๊ทธ๋๋ ์ฐ๋ฆฌ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ MUI์ ์ปดํฌ๋ํธ๋ค์ ๋ถ๋ถ ๋ถ๋ถ ์ด์ฉํ๊ณ ์๊ณ , 10ํ์ด์ง๊ฐ ๋์ด๊ฐ ์ ๋์ ์์ฃผ ๋ง์ ๋ฐ์ดํฐ๊ฐ ์์ผ ๊ฒ ๊ฐ์ง ์๊ธฐ์.. ์ผ๋จ ์ ์ฉํด ๋ณด๊ธฐ๋ก!
ํ์ด์ง ์๊ณ ๋ฆฌ์ฆ
ํ์ด์ง์ฒ๋ฆฌ๋ฅผ ํ๋ ค๋ฉด ํ์ํ ๊ฒ๋ค์ด ๋ช ๊ฐ์ง ์๋ค.
- ํ ํ์ด์ง์ ๋ช ๊ฐ์ ๊ฒ์๊ธ์ ๋ณด์ฌ์ค ๊ฒ์ธ์ง?
- ๋ง์ง๋ง ํ์ด์ง๋ ๋ช ํ์ด์ง์ธ์ง
๋์ ๊ฒฝ์ฐ์๋ ํ ํ์ด์ง์ 5๊ฐ์ ๊ฒ์๊ธ์ ๋ณด์ฌ์ฃผ๊ธฐ๋ก ํ๋ค.
๊ทธ๋ผ ์ดํ์ด์ง์ ์ ๊ฐ์ ๊ฒฝ์ฐ๋ ์๋์ ๊ฐ์ด ๊ณ์ฐํด๋ณผ ์ ์๋ค.
const LAST_PAGE = board.length % 5 === 0 ? parseInt(board.length / 5) : parseInt(board.length / 5) + 1;
ํ ํ์ด์ง์ ๋ค์ด๊ฐ ์์ธ 5๋ก ๋๋์์ ๋ ๋ฑ ๋จ์ด์ง๋ค๋ฉด ๊ทธ ์๊ฐ ๋ง์ง๋ง ํ์ด์ง๊ฐ ๋ ๊ฒ์ด๊ณ ,
๊ทธ๋ ์ง ์๋ค๋ฉด ๋ค์ํ์ด์ง๋ก ๋์ด๊ฐ๋ 1์ ๋ํด์ฃผ๋ ์์ด๋ค.
๋ค์์ผ๋ก ์ด์ ๊ฐ๊ฐ ํ์ด์ง์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๋ฅผ ์๋ผ์ ๊ฐ์ ธ์์ผ ํ๋ค.
// ๊ฒ์๊ธ ๋ฆฌ์คํธ ๋ ๋๋ง ํธ๋ค๋ฌ
const handleBoardList = () => {
...
return board
.slice(5 * (currentPage - 1), 5 * (currentPage - 1) + 5)
.map((item) => <BoardItem key={item.id} item={item} />);
}
};
๋์ ๊ฒฝ์ฐ์๋ ์ ์ฒด ๋ฐ์ดํฐ์์ ํ์ฌ ํ์ด์ง์ ๋ฐ๋ผ์ slice ํ ๋ฐ์ดํฐ๋ค์ ๊ฐ์ ธ์์ ๋ฟ๋ ค์ฃผ๋๋ก ํ๋ค.
์ ์์ ๊ฐ๊ฐ์ ํ์ด์ง์ ์ ์ฉํด๋ณด๋ฉด ์ด๋ ๋ค.
// 1ํ์ด์ง์ผ ๊ฒฝ์ฐ
5 * 0, 5 * 0 + 5 => ์ธ๋ฑ์ค 0๋ถํฐ 5๊น์ง
// 2ํ์ด์ง์ผ ๊ฒฝ์ฐ
5 * 1, 5 * 1 + 5 => ์ธ๋ฑ์ค 5๋ถํฐ 10๊น์ง
...
MUI Pagination ์ปดํฌ๋ํธ ์ ์ฉํ๊ธฐ
์ ์ฉํ ์ปดํฌ๋ํธ๋ ์๋์ ๊ฐ๋ค.
<PaginationWrap>
{currentLocation && (
<Pagination page={currentPage} count={LAST_PAGE} defaultPage={1} onChange={handlePageChange}/>)}
</PaginationWrap>
Pagination ์ปดํฌ๋ํธ์๋ ์ฌ๋ฌ ์์ฑ๋ค์ด ์๋ค.
page
: ํ์ฌ ํ์ด์ง๊ฐ activecount
: ๋ง์ง๋ง ํ์ด์งdefaultPage
: ๋ํดํธ ํ์ด์ง ๊ฐonChange
: ํ์ด์ง ๋ณ๊ฒฝ๋ ์ ์๋๋ก ๋ฃ์ด์ฃผ๋ ํจ์
onchange ํธ๋ค๋ฌ์๋ ํด๋ฆญํ ๊ฐ์ ํ์ฌ ํ์ด์ง๋ก ์ค์ ํ ์ ์๋ ๋ก์ง์ ๋ฃ์ด์ฃผ์๋ค.
const [currentPage, setCurrentPage] = useState(1);
...
const handlePageChange = (event) => {
const currentPageIndex = Number(event.target.outerText);
setCurrentPage(currentPageIndex);
};
์์ฑํ ๊ฒฐ๊ณผ๋ฌผ์ ์๋์ ๊ฐ๋ค!.. ๋ฐ์ดํฐ๊ฐ ๋ง์ด ๋ค์ด๊ฐ ์์ง ์์ง๋ง 2ํ์ด์ง๋ก ์ด๋ํ์ ๊ฒฝ์ฐ ๋ ๋๋ง์ด ์ ๋๋ค.
๋ฆฌ์กํธ๋ก ํ์ด์ง๋ค์ด์
์ ์ฒ์ ๊ตฌํํด๋ณด์๋๋ฐ ํ์ด์ง ๋ก์ง์ ์ดํดํ๊ธฐ๊น์ง ์๊ฐ์ด ์ข ๊ฑธ๋ ธ๋ ๊ฒ ๊ฐ๋ค. ๐ค
๋ค์์ ํ์ด์ง ์ฒ๋ฆฌ๊ฐ ํ์ํ ๋๋ ์๊ธดํ๊ฒ ์ธ ์ ์๊ธธ ๋ฐ๋ผ๋ฉฐ!..
'๐ Studying > ๐ TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] API์๋ฒ env ํ๊ฒฝ๋ณ์ ์ ์ฉํ๊ธฐ (0) | 2022.12.27 |
---|---|
[React] setState ํจ์ prop์ผ๋ก ๋ณด๋ด ์ฌ์ฉํ๊ธฐ (0) | 2022.12.26 |
React redux์ ํจ๊ป axios๋ฅผ ์ด์ฉํด์ deleteํ๊ธฐ (2) | 2022.12.22 |
[React] Material UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉํด๋ณด๊ธฐ (0) | 2022.12.21 |
fetch์ Axios ๋น๊ต (0) | 2022.12.19 |
Comment