๋ฐ์ดํฐ ๋ก๋ฉ ์ค ๊น๋นก์ ๋ฐ์
๋ผ๋ฒจ ๋ณ๊ฒฝ ์๋ง๋ค ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ๋ก๋๋๋ฉด์ ์ง๋ ์์ ๋ง์ปค๋ค์ด ๊น๋นก์ด๋ ํ์์ด ๋ฐ์.
์ง๋ ์ด๊ธฐํ ๋ฌธ์
๋ผ๋ฒจ ๋ณ๊ฒฝ ํ, ๋ฐ์ดํฐ ๋ก๋ ์๋ฃ ์ ์ง๋ ์ค์ฌ์ด ์ด๊ธฐ ์ํ๋ก ๋๋์๊ฐ๊ฑฐ๋ ๋ฌธ์ ๊ฐ ๋ฐ์.
์ด๋ ๋คํธ์ํฌ ์์ฒญ๊ณผ UI ๊ฐฑ์ ์ฌ์ด์ ๋๋ ์ด๋ก ์ธํด ์ฌ์ฉ์ ๊ฒฝํ์ด ์ ํ๋๋ ์์ธ์ด ๋์์.
๊ธฐ์กด ์ฝ๋ใ ๋กฑ
import { useQuery } from "@tanstack/react-query";
import { fetchMapMarkersByLabel } from "@/api";
export const useMarkersByLabel = (label: string) => {
const { data, isLoading, isError } = useQuery({
queryKey: ["markers", label],
queryFn: () => fetchMapMarkersByLabel(label),
enabled: !!label,
});
return {
markers: data,
isLoading,
isError,
};
};
ํ๋ฆฌํจ์นญ ๋์ ์ ์๋ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๋๋ง๋ค API ์์ฒญ์ด ๋ฐ์ํ๋ฉฐ, ๋ก๋ฉ ์ํ์ ๋ฐ์ดํฐ ๊ฐฑ์ ๊ฐ์ ๊ฐ๊ฒฉ์ด ์กด์ฌํ์.
ํ๋ฆฌํจ์นญ์ ์ฌ์ฉ์๊ฐ ํน์ ๋ผ๋ฒจ์ ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํ๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์บ์ฑํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ๋ค์ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋์์:
export const prefetchMarkersByLabel = (
queryClient: ReturnType<typeof useQueryClient>,
label: string
) => {
queryClient.prefetchQuery({
queryKey: ["markers", label],
queryFn: () => fetchMapMarkersByLabel(label),
});
};
import {
useGetHoleMarkers,
useGetMarkersByLabel,
prefetchMarkersByLabel,
} from "@/store/queries/map.query";
import { useQueryClient } from "@tanstack/react-query";
export const useMap = (label?: string) => {
const queryClient = useQueryClient();
const safeLabel = label ?? "";
const {
data: HoleMarkers,
isLoading: LoadingHole,
isError: HoleError,
} = useGetHoleMarkers();
const {
data: filteredMarkers,
isLoading,
isError,
isPending,
} = useGetMarkersByLabel(safeLabel);
const labels = ["ํ์", "์ผ์", "์ค์", "์์", "๋์ ํธ"];
labels
.filter((label) => label !== safeLabel)
.forEach((label) => {
prefetchMarkersByLabel(queryClient, label);
});
return {
HoleMarkers,
LoadingHole,
HoleError,
filteredMarkers,
isLoading,
isError,
isPending,
};
};
prefetchQuery
๋ฅผ ํ์ฉํ์ฌ ๋ผ๋ฒจ ๋ฆฌ์คํธ๋ฅผ ์ํํ๋ฉฐ ๊ฐ ๋ผ๋ฒจ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฏธ๋ฆฌ ๋ก๋.ํ๋ฆฌํจ์นญ์ผ๋ก ์ธํด ๋ผ๋ฒจ ๋ณ๊ฒฝ ์ ๋ฐ์ดํฐ๋ฅผ ์ฆ์ ๋ก๋ํ ์ ์์ด ๋ง์ปค๊ฐ ๊น๋นก์ด๋ ํ์์ด ์ฌ๋ผ์ง.