Today, What I learned?
์ง๊ธ ํ๋ก์ ํธ์์ ์ฌ์ฉ๋๊ณ ์๋ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ์ staleTime๊ณผ CacheTime, invalidateQueries์ ๋ํ ๊ฐ๋ ์ด
์ ๋ฆฝ๋์ด ์์ง ์์ ๊ฒ ๊ฐ์์ ํ๋ฒ ์ ๋ฆฌํ๋ฉด์ ๊ณต์๋ฌธ์๋ ์ฝ์ด๋ณด๊ณ .. ๋ฏธ๋์ ๋๋ฅผ ์ํ ๊ธฐ๋ก!..
๊ณต์ ๋ฌธ์ ๋งํฌ๋ ์ด์ชฝ์ด๋ค.
https://tanstack.com/query/latest/docs/react/overview
staleTime
๋ฆฌ์กํธ ์ฟผ๋ฆฌ๋ ์๋ฒ๋ก๋ถํฐ ์๋ต๋ฐ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์ํ๋ผ๊ณ ์ ์ํ๋ค.
์ด ์๋ฒ์ํ๊ฐ ์ ์ ํ(fresh) ๋ฐ์ดํฐ๋ก ๋๊ธฐํ(refetch)๋ ์ ์๋๋ก ํด์ฃผ๋๋ฐ, ์๋์ ๊ฐ์ ๊ฒฝ์ฐ์ผ ๋ ์๋์ผ๋ก ๋๊ธฐํ๋๋ค.
- (๋ฆฌ์กํธ ์ฟผ๋ฆฌ ํ ์ด ํฌํจ๋) ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ๋์ ๋
- ๋คํธ์ํฌ๊ฐ ๋ค์ ์ฐ๊ฒฐ๋์ ๋
- ๋ค๋ฅธ ์ฐฝ์ ์๋ค๊ฐ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ค์ focus ๋์ ๋
- ์ค์ ํ refetch interval์ ๋ฐ๋ผ ๋ค์ ๋ฐ์ดํฐ๋ฅผ ํธ์ถํ ๋
staleTime์ ๋ฐ์ดํฐ์ ์ ์ ํ ์ํ๊ฐ ์ ์ง๋๋ ์๊ฐ์ ๋งํ๋ค.
์ ์ ํจ์ ๊ธฐ์ค์ ์๋ฒ ์ํ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ํด๋ผ์ด์ธํธ์ ๋์ฐฉํ ์์ ๋ถํฐ!..
staleTime์ด ์ ์ฉ๋๋ ์๊ฐ ๋์์ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๊ฐ ๋ค์ ํธ์ถ๋์ง ์๊ณ , ์ด๋ฏธ ์บ์ฑ๋ ์๋ฒ ์ํ๋ฅผ ๋ถ๋ฌ์จ๋ค.
๐ค ๊ทธ๋ผ staleTime์ด ์ง๋๋ฉด??
๊ทธ๋๋ถํฐ๋ stale ์ํ๊ฐ ๋์ด refetch๊ฐ ํ์ํ ์ํฉ์ refetch ๋์ด ์ต์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
staleTime์ ๊ธฐ๋ณธ์ ์ผ๋ก 0์ผ๋ก ์ค์ ๋์ด ์์ด์, staleTime์ ์ค์ ํด ์ฃผ๋ฉด
๋ฆฌ์กํธ ์ฟผ๋ฆฌ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ต์ ํํ ๊ธฐ์ค์ ์ฌ์ด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ถํ์ํ refetch๋ฅผ ๋ง์ ์ ์๋ค.
react-query-devtool๋ก ๋ฐ์ดํฐ์ ์ํ ํ์ ํ๊ธฐ
๋ฆฌ์กํธ ์ฟผ๋ฆฌ์์ ์ ๊ณตํ๋ devtool์ ์ด์ฉํ๋ฉด ๋ฐ์ดํฐ๊ฐ fresh ํ ์ง stale ํ ์ง ํ๋์ ํ์ธํด ๋ณผ ์ ์๋ค! ๐
์๋ ๊ฐ์ ๊ฒฝ์ฐ์๋ 3๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก null๊ฐ์ด ์ค์ ๋์ด ์๊ณ disbled์ฒ๋ฆฌ๊ฐ ๋์ด์๋ค. (๋ก๊ทธ์ธ ํ์ ํ์ฑํ๋๋ ๋ฐ์ดํฐ๋ค)
๋ก๊ทธ์ธ์ ํ๋ฉด stale ํ๋ ๋ฐ์ดํฐ๋ค์ด fresh ํด์ง ๊ฒ์ ๋ณผ ์ ์๋ค. ๋ก๊ทธ์ธ ํ ๊ด๋ จ ์ปดํฌ๋ํธ๋ค์ด ๋ค์ ๋ง์ดํธ ๋๋ฉด์ disabled ๋์ด์๋ ๊ฒ์ด ์ฌ๋ผ์ก๊ธฐ ๋๋ฌธ..
cacheTime
์ฟผ๋ฆฌ๊ฐ inactive ์ํ๊ฐ ๋๋ฉด cacheTIme๋์ ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ๋ค๊ฐ ๊ฐ๋น์ง์ปฌ๋ ํฐ๋ก ์์ง๋์ด ์ฌ๋ผ์ง๋ค.
๐ค inactive ์ํ??
์ฟผ๋ฆฌ ํ
์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ ๋ ์ํ!
๐ค ๊ทธ๋ผ cacheTIme ์์ ๋ค์ ์ฟผ๋ฆฌ๊ฐ ๋ง์ดํธ ๋๋ค๋ฉด??
์บ์ ์ ์ฅ์์ ์์๋ ๊ฐ์ด ์ฐ์ ์ ์ผ๋ก ๋ฐํ๋์ง๋ง staleTime์ ๊ฒฝ๊ณผํ ๊ฒฝ์ฐ์๋ refetch ๋ ์ ์๋ค!
staleTime์ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ ์์ ๋ถํฐ ์์๋์ง๋ง cacheTime์ inactive ์ํ๋ถํฐ ํ์ด๋จธ๋ฅผ ์์ํ๋ค๋ ์ !..
invalidateQueries()
invalidateQueries
๋ queryClient์ ๋ฉ์๋ ์ค ํ๋๋ค. ์๋์ ๊ฐ์ด ๋จผ์ ์ ์ธ์ด ๋์ด์์ด์ผ ์ฌ์ฉ ๊ฐ๋ฅ!
const queryClient = useQueryClient();
๊ณต์ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด ์๋์ ๊ฐ์ด ์บ์ ์์ ๋ชจ๋ ์ฟผ๋ฆฌ๋ฅผ ๋ฌดํจํํ๋ค.
๋ง์ฝ ๋งค๊ฐ๋ณ์๋ก ์ฟผ๋ฆฌํค๊ฐ ์ง์ ๋์ด ์๋ค๋ฉด, ํด๋น ์ฟผ๋ฆฌํค์ ํด๋นํ๋ ์ฟผ๋ฆฌ๋ง ๋ชจ๋ ๋ฌดํจํ๋๋ค.
// Invalidate every query in the cache
queryClient.invalidateQueries()
// Invalidate every query with a key that starts with `todos`
queryClient.invalidateQueries({ queryKey: ['todos'] })
๐ค ์์๋ฅผ ๋ค์๋ฉด?
์ฐ๋ฆฌ ํ๋ก์ ํธ์ ์๋ ๊ด์ฌ(์ข์์) ๊ธฐ๋ฅ.
์๋ ๋ฎคํ
์ด์
์ด ์คํ๋๊ณ ์ฑ๊ณตํ์ ๋, ์ข์์ ๊ด๋ จ ์ฟผ๋ฆฌ๋ค์ด ๊ฐฑ์ ๋์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ฟ๋ ค์ค์ผ ํ๊ธฐ ๋๋ฌธ์ invalidate ๋๊ณ ์๋ค.
const { mutate: updateMyProjectMutate } = useMutation(
() => updateMyProject(uid, pid, isLike),
{
onSuccess: () => {
queryClient.invalidateQueries(['myProjects', uid]);
queryClient.invalidateQueries(['post', 'mostViewed']);
queryClient.invalidateQueries(['post', 'mostLiked']);
queryClient.invalidateQueries(['likedProjects', uid]);
},
},
);
์ข์์๊ฐ ์ถ๊ฐ๋๊ฑฐ๋ ์ฌ๋ผ์ง ๋๋ง๋ค ์ฟผ๋ฆฌ๊ฐ ๋ฌดํจํ๋๊ธฐ ๋๋ฌธ์
ํด๋น ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ ๋ถ๋ถ์์๋ useQuery๊ฐ ์๋กญ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์ต์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ค๋ค!
// ์ ์ ํ๋ก์ ํธ ๋ฆฌ์คํธ ๋ฐ์์ค๋ ์ฟผ๋ฆฌ
const { data: userProjectListsData }: any = useQuery({
queryKey: ['myProjects', uid],
queryFn: getUserProjectList,
staleTime: staleTime.myProjects,
enabled: !!uid,
});
'๐ Studying > ๐ TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React+typescript] ์นด์นด์คํก ๊ณต์ ๊ธฐ๋ฅ ์ถ๊ฐํ๊ธฐ (2) | 2023.03.07 |
---|---|
[React] Input ํ๊ทธ clear ๋ฒํผ ์ฌ๋์ ์ ํ๋ ๋ฒ๊ทธ (0) | 2023.03.06 |
[React] React.memo๋ก ์ต์ ํํ๊ธฐ (0) | 2023.03.02 |
[React] ์ด๋ฏธ์ง ํ๊ทธ ๋์ ๊ฒฝ๋ก ์ถ๊ฐ src require (0) | 2023.02.28 |
[React] ํ์ด์ด๋ฒ ์ด์ค ํ๋กํ ์ด๋ฏธ์ง ์ฉ๋ ์ต์ ํ (0) | 2023.02.27 |
Comment