[React-query] ๋ฐ์ดํฐ ํ๋ฆฌํ์นญ ์ฌ์ฉ๋ฒ ์ ๋ฆฌ
๐คทโ๏ธ ๋ณธ๋ก ์ ์์
ํ์คํ ๊ฐ๋ฐ์ ์งํํ๋ฉด์ ์ฌ์ฉ์์ ์ ์ฅ์ ์ฐ์ ์ผ๋ก ํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ์ต์ฐ์ ์ผ๋ก ๊ฐ๋ฐํ๋ ค ๋ ธ๋ ฅํฉ๋๋ค.
์ผ๋ง ์ ์ ์ฝ์ ์ฑ ์์
"๊ฐ๋ฐํ๋ ์ฌ๋์ด ์๊ณ ๋กญ๋ค๋ฉด ์ฌ์ฉํ๋ ์ฌ๋์ด ํธ๋ฆฌํ๊ณ , ๊ฐ๋ฐํ๋ ์ฌ๋์ด ํธ๋ฆฌํ๋ค๋ฉด ์ฌ์ฉํ๋ ์ฌ๋์ด ์๊ณ ๋กญ๋ค"
๋ผ๋ ๋ง์ ๋์๊ฒจ ๋ด ๋๋ค!
Prefetching์ด๋ ๋ฌด์์ธ๊ฐ?
ํ๋ฆฌํ์นญ์ ๋ฐ์ดํฐ๊ฐ ์ค์ ๋ก ํ์ํ๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์บ์์ ์ ์ฅํ๋ ๊ณผ์ ์ ๋งํฉ๋๋ค.
์ด๋ฌํ ํ๋ฆฌํ์นญ ๊ธฐ์ ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์บ์ฑํ๋ฉด ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์ํ ์ ์์ต๋๋ค.
๊ฐ๋จํ ์ค๋ช ํ๋ฉด
๐ก ๋ฏธ๋ฆฌ ํ์ํ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๋ํ์ ์ผ๋ก ํ์ด์ง๋ค์ด์ ๊ณผ ํน์ ํญ์ ๋๋ฅผ ํ๋ฅ ์ด ๋์ ๊ณณ์์ ํ๋ฆฌํ์นญ์ ๋ง์ด ์ฌ์ฉํฉ๋๋ค.
ํ๋ฉด์ด ๋ถ๋๋ฝ๊ฒ ์ด๋ํ๊ณ ์บ์ฑ๋ฐ์ดํฐ์ ์ก์ธ์ค ํด์ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์์๊ฒ ์ข์ ๊ฒฝํ์ ์ค ์ ์์ต๋๋ค.
ํ๋ฆฌํ์นญ์ ์ ์ฌ์ฉํ๋์?
React-query์์ ํ๋ฆฌํ์นญ์ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ ๋น ๋ฅด๊ณ ๋ถ๋๋ฌ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํจ์ ๋๋ค.
- ํ๋ฆฌํ์นญ์ด ์๋ ๊ฒฝ์ฐ: ๋ค์ ํ๋ฉด์ผ๋ก ์ด๋ํ๋๋ฐ ์ฝ๊ฐ์ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. ์ด๋ฅผ ํตํด ๋ถ๋๋ฝ์ง ์์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
- ํ๋ฆฌํ์นญ์ด ์๋ ๊ฒฝ์ฐ: ๋ค์ ํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์บ์ฑํด ๋ ์ผ๋ก์จ ์ฌ์ฉ์๊ฐ ๋ค์ ํ๋ฉด์ผ๋ก ์ด๋ํ ๋ ๋์ฑ ๋น ๋ฅด๊ณ ๋ถ๋๋ฌ์ด ํ๋ฉด์ ์ ๊ณตํ๊ณ ์ข์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ค ์ ์์ต๋๋ค.
๐คทโ๏ธ ํ๋ฆฌํ์นญ์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์?
https://cometruedream.tistory.com/130
1. useQueryClient ์ค์
import { useQueryClient } from '@tanstack/react-query';
const queryClient = useQueryClient();
useQueryClient์ import ํ ํ useQueryClient๋ฅผ ์ ์ธํฉ๋๋ค.
2. prefetchNextPage ํจ์๋ฅผ ๋ง๋ค๊ณ prefetchQuery๋ฅผ ํธ์ถํฉ๋๋ค.
useEffect(() => {
const prefetchNextPage = async () => {
const nextPage = currentPage + 1;
const queryKey = [POI_KEYS.REVIEW_LIST, params?.id, nextPage, reviewFilter];
const queryFn = () =>
apiGetReviewList({
poiIdx: params?.id,
page: nextPage,
pageSize: PAGE_SIZE.REVIEW,
type: reviewFilterConvert(reviewFilter),
});
await queryClient.prefetchQuery({ queryKey, queryFn });
};
prefetchNextPageReviews();
}, [currentPage])
ํ๋ฆฌํ์น ํจ์๋ฅผ ๋ง๋ค์ด์ ํธ์ถํ๋ ๋ฐฉ์์ผ๋ก ๋ก์ง์ ๋ง๋ค์์ต๋๋ค.
์ ์ ๋ชฉํ๋ prefetch ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ๋ชจ๋ํ ํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๊ณ ์์ต๋๋ค.
React-query Tool์ ํ์ฉํด์ ํ๋ฆฌํ์นญ ํ์ธ์ด ๊ฐ๋ฅํฉ๋๋ค.
“GET_REVIEW_LIST”๋ฅผ ๋ฏธ๋ฆฌ ํธ์ถํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์บ์ฑํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๐คทโ๏ธ useQueryClient์ ์ค์ํ ์ ?
useQueryClient๋ QueryClient ์ธ์คํด์ค์ ์ ๊ทผํด์ ์ฌ์ฉํฉ๋๋ค.
react-query๋ฅผ ์ด๊ธฐ ์ค์ ํ ๋ QueryClient๋ฅผ ์ ์ญ์ผ๋ก ์ค์ ํ๋ฏ๋ก useQueryClient๋ฅผ ์ฌ์ฉํ๋๋ฐ ํฐ ๋ฌธ์ ๋ ์์ต๋๋ค.
๊ทธ๋ฌ๋, ํจ์ ๋ด์์ ์ ์ธํ์ฌ ์ฌ์ฉํ๊ฒ ๋๋ฉด hooks ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ฌ๋ฐ๋ ์ค๋์ ๋ ๋ณ ์ด์ธ ๋ณด๊ณ ๊ฐ์ธ์!
https://cometruedream.tistory.com/247
https://cometruedream.tistory.com/243
https://cometruedream.tistory.com/242
https://cometruedream.tistory.com/241
https://cometruedream.tistory.com/244