페이지네이션 및 무한스크롤은 서버에서 불러오는 정보의 양이 많을 경우 필수적입니다.
따라서 페이지네이션 및 무한스크롤을 통해 데이터를 나눠서 불러오면 사용자 경험이 개선됩니다.
최대 페이지 수 파악
limit과 offset을 사용한 데이터 접근
pre-fetching을 통한 로딩 속도 개선
// 페이징 query
const { data, isLoading } = useQuery({
queryKey: QueryKeys.PAGED_PLANS(page),
queryFn: () => fetchMyPlansLimit(myId, PAGE_SIZE, (page - 1) * PAGE_SIZE),
keepPreviousData: true,
select: (data) => ({
plans: data.data,
totalCount: data.headers // totalCount 데이터 가져오기
}),
staleTime: QueryTime.TWO_MINUTE,
cacheTime: QueryTime.FIVE_MINUTE
});
// pre-fetch 로직
const prefetchPage = (page) => {
const queryKey = QueryKeys.PAGED_PLANS(page);
// 이미 캐시에 데이터가 있는 경우 prefetch 실행 안 함
if (!queryClient.getQueryData(queryKey)) {
queryClient.prefetchQuery({
queryKey,
queryFn: () => fetchMyPlansLimit(myId, PAGE_SIZE, (page - 1) * PAGE_SIZE),
staleTime: QueryTime.TWO_MINUTE,
cacheTime: QueryTime.FIVE_MINUTE
});
}
useQuery()훅의 여러 추가 옵션들을 활용해 서버 상태 관리TanStack Query를 사용하면서 상태 관리가 매우 편리해졌고, pre-fetching 기능을 통해 UX가 눈에 띄게 개선되었습니다. 무한스크롤에서는 useInfiniteQuery() 훅을 사용하여 데이터 추가 로딩 로직을 컴포넌트에서 전달 하는 과정이 있던데 이것도 한 번 도전하고 싶은 기능이였습니다.