여기에서 소개할 기능들은 사용자 경험을 향상시키기 위해 꼭 알아야 하는 핵심 옵션이야!
const mutation = useMutation(
(newLike) => axios.post('/api/like', newLike),
{
onMutate: (newLike) => {
queryClient.setQueryData(['likes'], (oldLikes) => [...oldLikes, newLike]);
},
onError: () => {
queryClient.invalidateQueries(['likes']); // 실패 시 상태 복구
},
}
);
🙌 쉽게 비유하자면: 좋아요 버튼을 누르자마자 숫자가 올라가는 것처럼, 결과를 믿고 미리 보여주는 경험이야!
queryClient.prefetchQuery(['posts', postId], () =>
axios.get(`/api/posts/${postId}`).then((res) => res.data)
);
🙌 쉽게 비유하자면: "미리 데운 음식"과 같아요. 손님이 주문하기 전에 음식을 준비해 두면, 빠르게 제공할 수 있어!
const { data, isFetching } = useQuery(
['posts', page],
() => fetchPosts(page),
{ keepPreviousData: true }
);
🙌 쉽게 비유하자면: "대기열 유지"와 같아요. 새로운 데이터를 가져오는 동안 기존 데이터를 유지해 화면이 깜빡이지 않아.
const { data, fetchNextPage, hasNextPage } = useInfiniteQuery(
['posts'],
({ pageParam = 1 }) => fetchPosts(pageParam),
{
getNextPageParam: (lastPage) => lastPage.nextPage || undefined,
}
);
🙌 쉽게 비유하자면: "자동 밥 리필"과 같아요. 밥그릇이 비면 자동으로 밥을 채워주는 것처럼 데이터를 제공해.
React Query의 이 옵션들을 활용하면 사용자 경험을 대폭 향상시킬 수 있어!
| 구분 | 페이지네이션 | 무한 스크롤 |
|---|---|---|
| 정의 | 데이터를 페이지 단위로 나누어 사용자가 이동할 수 있게 제공. | 사용자가 스크롤을 내릴 때마다 데이터를 로드하는 방식. |
| UX 특성 | 명확하게 페이지를 구분하여, 사용자가 특정 페이지로 쉽게 이동 가능. | 끊김 없는 사용자 경험 제공. 자연스럽게 데이터를 추가. |
| 장점 | - 사용자가 원하는 페이지를 쉽게 선택 가능. | - 페이지를 기억하기 쉬움. |
| 단점 | - 사용자가 페이지를 전환할 때 약간의 로딩이 발생. | - 클릭/탐색 작업 필요. |
| 사용 사례 | 검색 결과 페이지 (예: 구글 검색, 쇼핑몰) | SNS 피드, 뉴스 앱 (예: 인스타그램, 페이스북) |
| 적합한 데이터 양 | 큰 데이터 양에 적합. 사용자가 원하는 위치로 점프 가능. | 비교적 적은 양의 데이터를 자연스럽게 소비할 때 적합. |