리액트 쿼리 useinfinitequery 무한스크롤 구현 시 페이지가 이동할 경우 데이터가 보존되게 할 수 있나요??
184
작성한 질문수 15
더보기 버튼 클릭 시 페이지 이동 (page=1 -> page=2) + 무한스크롤 구현 기능 구현이 필요해서 아래와 같이 구현해보았는데 어쩔땐 되고 어쩔땐 안되더라구요...
만약 데이터를 10개씩 불러올 경우 10개 -> 20개 -> 30개 -> 40개 이러다 갑자기 다시 10개가 됩니다...
원래 useInfiniteQuery 무한스크롤 구현 시 페이지이동하면서 기존 데이터를 보존하는 방법이 불가능한건지 아님 제가 코드를 잘못짠건지 궁금합니다...
const useInfiniteQuery = (params: Params) => {
const searchParams = useSearchParams()
const page = searchParams.get('page')
return useInfiniteQuery({
queryKey: [CONTENTS_KEY, params],
queryFn: ({ pageParam }) => {
return getContentsApiClient({ ...params, ...outLinkParams(), page: Number(pageParam) })
},
getNextPageParam: (lastPage, _, lastPageParam) => {
// 마지막 page라면 hasNextPage가 false
const lastPageNumber = Math.ceil(lastPage.totalCount / (params.size || 10))
if (lastPageNumber === lastPageParam) {
return undefined
}
return Number(lastPageParam) + 1
},
initialPageParam: Number(page) || 1,
placeholderData: keepPreviousData,
})
}
//더보기 버튼
// 클릭 시 페이지 이동
function AddMore({ fetchNextPage, totalPages }: { fetchNextPage: () => void; totalPages: number }) {
const searchParams = useSearchParams()
const pathname = usePathname()
const params = new URLSearchParams(searchParams.toString())
const pageNo = Number(searchParams.get('page') || 1)
params.set('page', (pageNo + 1).toString())
if (totalPages === pageNo) return null
return (
<div className={cn('wrap')}>
<Link
className={cn('link')}
href={`${pathname}?${params.toString()}`}
onClick={fetchNextPage}
scroll={false}
>
<span className={cn('label')}>더보기</span>
</Link>
</div>
)
}강의 잘 듣고있습니다. 감사합니다!
참고로 백엔드는 문제가 없습니다.
답변 3
0
바빠서 답변이 늦었네요ㅠ
테스트해보니 무한스크롤(더보기) 구현 시엔 쿼리키에 page 파라미터가 포함되면 안되더라구용. 쿼리스트링이 쿼리키에 포함되어있을 경우 페이지 이동 시 page 쿼리스트링이 바뀌면서 리액트 쿼리가 새로운 쿼리로 인식해 데이터를 초기화 시키는 것 같습니다.
두 분 모두 답변 감사합니다!
0
initialPageParam: 1 이렇게 고정으로 설정해보시겠어요?
page가 query key에 안들어가있어서 문제 없지 않을까 했는데
gemini에 물어보니 initialPageParam 또한 변경되면 새로운 쿼리로 인식하고 이전 값을 초기화 한다는 답변을 주네요.
만약 해당 이슈가 아니더라도, initialPageParam 은 1로 고정적으로 사용하는게 더 의도와 가까워 보입니다.
0
react-query에는 데이터가 저장되어있는 유효시간이 있는데 그게 초과된 건 아닌가싶습니다. 한번 staleTime과 gcTime을 짧게 줘서 그 시간에 데이터가 사라지는 게 재현되는지 확인해보시고, 맞다면 두 시간을 길게 또는 무한으로 줘보세요.
캡처링부분 질문있습니다.
0
74
2
깃에 소스코드를 찾을 수 없습니다.
0
113
2
useInfiniteQuery promise와 react use 사용시 페이지 무한 로딩
0
98
1
import 파일 경로를 찾지 못 해서 에러가 발생합니다.
0
109
2
css 라이브러리 추천 부탁드립니다
0
140
2
팔로우 추천 목록이 빈 배열로 들어옵니다.
0
130
1
게시물 업로드 시 userId가 undefined로 들어가는 오류
0
119
1
useSuspenseQuery 사용 시 SSR 401 이슈 관련
0
171
1
폴링이 필요없는 이유
0
93
2
next Request Memoization과 react cache
0
108
2
seo 최적화 기준은 데이터 fetching인가요 아님 데이터 렌더링인가요?
0
84
2
next.js 서버fetch 에러 fallback ui 구현 방법
0
173
2
프레임워크 여론 파악법
0
125
2
필터옵션이 많은 페이지에서 서버 fetch를 하는게 맞는걸까요??
0
103
2
서버 fetch suspense 로 감싸고 새로고침 시 잠시 빈 화면이 노출된 후 fallback ui가 노출됩니다.
0
102
2
template.tsx 내 서버fetch 응답값과 클라이언트 컴포넌트 상태값 싱크가 맞지 않는 이슈
0
66
2
Auth.js 사용 시 authorize 함수가 호출되지 않습니다
0
131
2
next.js 에서 로그인에 관하여
0
138
1
Next의 route handler에 대한 질문이 있습니다.
0
101
2
게시판 리스트 만들때 use client를 어디서부터 집어넣어야할지 모르겠습니다
0
97
2
프라이빗 폴더를 해야 하는 이유가 모호한 것 같아요.
0
85
2
vanilla-extract 못찾는 문제
0
229
2
fetch 캐싱과 revalidate 관련
0
84
2
강의 듣는 방법
0
104
2





