
컴포넌트 분리를 고민하는 컴포넌트는 위 사진과 같은 PaginationNav 컴포넌트이다.
코드는 다음과 같다.
export default function PaginationNav({ courseCount = 0 }: PaginationNavProps) {
return (
<nav className="flex justify-center">
<ArrowLeft />
{new Array(lastPage - firstPage + 1)
.fill(0)
.map((_, index) => index + firstPage)
.map((page) => (
<button>
{page}
</button>
))}
<ArrowRight />
</nav>
)
}
{new Array(lastPage - firstPage + 1)
.fill(0)
.map((_, index) => index + firstPage)
.map((page) => (
<button>
{page}
</button>
))}
이 배열에 대한 코드가 컴포넌트 흐름과 다르다는 느낌이 있어 분리를 하면 가독성이 더 좋지 않을까? 고민을 했다.
export default function PaginationNav({ courseCount = 0 }: PaginationNavProps) {
return (
<nav className="flex justify-center">
<ArrowLeft />
<PaginationList currentPage={currentPage} maxPage={maxPage} />
<ArrowRight />
</nav>
)
}
function PaginationList({ currentPage, maxPage }: PaginationListProps) {
return (
<div>
{new Array(shownLastPage - shownFirstPage + 1)
.fill(0)
.map((_, index) => index + shownFirstPage)
.map((page) => (
<button>
{page}
</button>
))}
</div>
)
}
위와 같은 코드가 될 것이다.
곰곰히 생각해보면 PaginationList 또한 PaginationNav역할을 하는게 맞다. 그런데 코드가 조금 더 길다고, 추상화 수준을 맞춘다고 컴포넌트를 또 분리하는 게 맞을까?에 대한 고민이다.