tanstack query๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ ํจ์นญ์ ํ๋๋ฐ ํ์ด์ง๋ค์ด์ ์ ๊ตฌํํ ๋, ๋ค์ ํ์ด์ง๋ก ์ด๋์ ํ ๋๋ง๋ค ๋ก๋ฉ ํ๋ฉด์ด ์ด์ง ๋ณด์ด๋ ๊ฒ์ ๊ฐ์ ํ๊ธฐ ์ํด์๋ prefetching ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
prefetching์ ์ฌ์ฉํ๋ฉด ๋ง ๊ทธ๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ์ ธ์์ ์บ์์ ๋ฃ๊ณ ์ฌ์ฉ์๊ฐ ๋ก๋ฉ ํ๋ฉด์ ๋ณด์ง ์๋๋ก ํ ์ ์๋ค.
prefetchQuery๋ QueryClient ์ ๋ฉ์๋์ด๊ณ , useQueryClient ํ ์ ์จ์ ๊ทธ QueryClient๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
์ํ ์ ๋ฐ์ดํธ๊ฐ ๋น๋๊ธฐ์ ์ด๋ผ ์ ๋ฐ์ดํธ๊ฐ ์ด๋ฏธ ์ ์ฉ๋์๋์ง ์ ํํ๊ฒ ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋ค์ ํ์ด์ง ๋ฒํผ์ ํด๋ฆญ ์ด๋ฒคํธ์์ prefetching์ด ์คํ๋๋๋ก ํ์ง ์๋๊ฒ ์ข๋ค.
๊ทธ๋์ ํ์ฌ ํ์ด์ง๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค useEffect๋ฅผ ์ฌ์ฉํด์ prefetching๋๋๋ก ํ๋ค.
useEffect(() => {
if (currentPage < maxPostPage) {
const nextPage = currentPage + 1;
queryClient.prefetchQuery({
queryKey: ["posts", nextPage],
queryFn: () => fetchPosts(nextPage),
});
}
}, [currentPage, queryClient]);
์ ์ฒด ์ฝ๋
import { useState, useEffect } from "react";
import { useQuery, useQueryClient } from "@tanstack/react-query";
export function Posts() {
const [currentPage, setCurrentPage] = useState(1);
const [selectedPost, setSelectedPost] = useState(null);
const queryClient = useQueryClient();
useEffect(() => {
if (currentPage < maxPostPage) {
const nextPage = currentPage + 1;
queryClient.prefetchQuery({
queryKey: ["posts", nextPage],
queryFn: () => fetchPosts(nextPage),
});
}
}, [currentPage, queryClient]);
const { data, isError, error, isLoading } = useQuery({
queryKey: ["posts", currentPage],
queryFn: () => fetchPosts(currentPage),
staleTime: 2000,
});
if (isLoading) {
return <h3>Loading...</h3>;
}
if (isError) {
return (
<>
<h3>Error fetching data</h3>
<p>{error.toString()}</p>
</>
);
}
.
.
.
์ฐธ๊ณ ๋งํฌ)
'๐ฅFrontEnd > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
tanstack query, useInfiniteQuery์ useQuery์์ ์ฐจ์ด์ (0) | 2025.01.03 |
---|---|
tanstak query์ staleTime๊ณผ gcTime ์ฐจ์ด (0) | 2024.12.30 |
tanstack query์ isFetching๊ณผ isLoading ์ฐจ์ด, React Query Dev Tools (0) | 2024.12.29 |
๋ฆฌ์กํธ ์ข์ ์ฝ๋ (๋ฆฌํฉํ ๋ง ํ ๋ ์ฐธ๊ณ ํ๊ธฐ) (0) | 2024.06.05 |
docusaurus์์ ์ต์ ๋ธ๋ก๊ทธ ๊ธ ๊ฐ์ ธ์ค๊ธฐ (0) | 2023.04.05 |