๐คทโ๏ธ ๋ณธ๋ก ์ ์์
react-query๋ React์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์บ์ฑํ๊ณ , ๋๊ธฐํํ๊ณ , ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ์ํ ํํฌ์ ์ ํธ๋ฆฌํฐ๋ฅผ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ฉ์ React์ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ์ ํฅ์์ํค๊ณ ์ฌ์ฉ์์๊ฒ ๋ถ๋๋ฌ์ด ๊ฒฝํ์ ์ค ์ ์์ต๋๋ค.
react-query ์ฌ์ฉ๋ฒ์ ๋ํด ์์๋ณด๊ธฐ
https://cometruedream.tistory.com/130
react-query ๋ฐ์ดํฐ ํ๋ฆฌํ์นญ ์ฌ์ฉ๋ฒ์ ๋ํด ์์๋ณด๊ธฐ
https://cometruedream.tistory.com/251
๐คทโ๏ธ refetch๋ ๋ฌด์์ธ๊ฐ?
refetch๋ ์บ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ stale ์ํ์ธ ๊ฒฝ์ฐ, ์ฆ ๋ง๋ฃ๋ ๋ฐ์ดํฐ(stale ์ํ)๊ฐ refetch ์ต์ ์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ฉด, ํด๋น ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์์ ๋ค์ ๊ฐ์ ธ์ ์ต์ ํํฉ๋๋ค.
๊ฐ๋จํ ๋งํ๋ฉด
๐ก ๋ง๋ฃ๋ ๋ฐ์ดํฐ๋ฅผ ์ต์ ๋ฐ์ดํฐ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.
์ค์ํ refetch ์ต์
- refetchOnMount
- ์ด ์ต์ ์ boolean ํ์ ์ ๊ฐ์ง๋ฉฐ, ํ๋ฉด์ด ๋ง์ดํธ(React ๋ผ์ดํ์ฌ์ดํด)๋ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ ธ์์ผ ํ๋์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. false๋ก ์ค์ ํ๋ฉด ํ๋ฉด์ด ๋ง์ดํธ ๋ ๋ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋ค์ ๊ฐ์ ธ์ค์ง ์์ต๋๋ค. ๋ฐ๋ฉด์, true๋ก ์ค์ ํ๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ๋ ๋ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋ค์ ๊ฐ์ ธ์ ์ต์ ํํฉ๋๋ค.
- refetchOnWindowFocus
- ์ด ์ต์ ์ boolean ํ์ ์ ๊ฐ์ง๋ฉฐ, ํ๋ฉด์ด focus ๋ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ ธ์ฌ์ง ๊ฒฐ์ ํฉ๋๋ค. false๋ก ์ค์ ํ๋ฉด ์ฐฝ์ด focus ๋์ด๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ ธ์ค์ง ์์ต๋๋ค. ๋ฐ๋ฉด์, true๋ก ์ค์ ํ๋ฉด ํ๋ฉด์ด ๋ ๋๋ง ๋๊ฑฐ๋ ๋ธ๋ผ์ฐ์ ํญ์ด๋ ํ๋ฉด์ ์ ํํ ๋ focus ๋๋ฏ๋ก, ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋ค์ ์ต์ ํํฉ๋๋ค (์: true ์ค์ ์ ํญ์ด๋ ํ๋ฉด ์ ํ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ ์ ์์ด ์ฌ์ฉ์๊ฐ ๋นํฉํ ์ ์์).
- refetchOnReconnect
- ์ด ์ต์ ์ boolean ํ์ ์ ๊ฐ์ง๋ฉฐ, ๋คํธ์ํฌ ์ํ๊ฐ ์ข์ง ์์ ๋ ์ ์ฉํฉ๋๋ค. false๋ก ์ค์ ํ๋ฉด ๋คํธ์ํฌ ์ฌ์ฐ๊ฒฐ์ด ๋ฐ์ํด๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ ธ์ค์ง ์์ต๋๋ค. ๋ฐ๋ฉด์, true๋ก ์ค์ ํ๋ฉด ๋คํธ์ํฌ ์ฌ์ฐ๊ฒฐ์ ๊ฐ์งํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์ต์ ํํฉ๋๋ค.
- refetchInterval
- ์ด ์ต์ ์ staleTime, cacheTime๊ณผ ๋์ผํ๊ฒ ์ ์ ํ์ ์ ๊ฐ์ง๋ฉฐ, refetchInterval: 60000์ 1๋ถ์ ์๋ฏธํฉ๋๋ค. ์ด ์ต์ ๊ณผ ์๊ฐ์ ์ค์ ํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์ต์ ํํฉ๋๋ค.
์ด 4๊ฐ์ refetch ์ต์ ์ด ์์ผ๋ฉฐ, refetchOnMount, refetchOnWindowFocus, refetchOnReconnect ์ต์ ์ ์ด๊ธฐ๊ฐ์ true์ ๋๋ค. ์๋น์ค์ ๋ง๊ฒ ์ฌ์ค์ ํ๋ฉด ๋ฉ๋๋ค.
๐คทโ๏ธ refetch๋ ๋ฌด์์ธ๊ฐ?
1. useQuery ์์
const { data = fallback } = useQuery([queryKeys.treatments], getTreatments, {
staleTime: 6000, // 1๋ถ
cacheTime: 30000, // 5๋ถ (cacheTime์ ๊ธฐ๋ณธ๊ฐ์ 5๋ถ์ด๋ฉฐ, cacheTime์ staleTime๋ณด๋ค ์งง์์๋ ์๋ฉ๋๋ค)
refetchOnMount: false,
refetchOnWindowFocus: false,
refetchOnReconnect: false,
});
์์ ์์ ์ฝ๋์์ ํ๋ฉด ๋ ๋๋ง ์, ํ๋ฉด์ด ํฌ์ปค์ค ๋ ๋, ๋คํธ์ํฌ๊ฐ ์ฌ์ฐ๊ฒฐ๋ ๊ฒฝ์ฐ์ ์ต์ ์ false๋ก ์ค์ ํ์์ผ๋ฉฐ, staleTime์ 1๋ถ, cacheTime์ 5๋ถ์ผ๋ก ์ค์ ํ์์ต๋๋ค.
์ฃผ์ํ ์ !
cacheTime์ staleTime๋ณด๋ค ์งง๊ฒ ์ค์ ํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์์ต๋๋ค.
๋ณด์ถฉ ์ค๋ช !
staleTime์ ๋ง๋ฃ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํฉ๋๋ค. cacheTime์ด staleTime๋ณด๋ค ์งง์ผ๋ฉด, cacheTime์ด ๋ง๋ฃ๋๋ฉด์ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ฒ๋ฆฌ๊ณ stale ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. ์ด๋ก ์ธํด ๋ฐ์ดํฐ๊ฐ ์ผ๊ด์ฑ์ ์์ด ์ฌ์ฉ์์๊ฒ ํผ๋์ ์ค ์ ์์ต๋๋ค.
2. ์ ์ญ refetch ์์
const queryClient = new QueryClient({
defaultOptions: {
queries: {
staleTime: 600000, // 10๋ถ
cacheTime: 900000, // 15๋ถ
refetchOnMount: false,
refetchOnReconnect: false,
refetchOnWindowFocus: false,
},
},
});
useQuery์๋ง ์ต์ ์ ์ค์ ํ ์ ์๋ ๊ฒ์ด ์๋๋ผ, QueryClient์์ ์ ์ญ์ผ๋ก ์ต์ ์ ์ค์ ํ ์๋ ์์ต๋๋ค.
refetch ์ต์ ์ค๋ฒ๋ผ์ด๋ฉ
์ ์ญ์ผ๋ก ์ค์ ํ ์ต์ ์ ์ค๋ฒ๋ผ์ด๋ฉํ๋ ค๋ฉด ์ค๋ฒ๋ผ์ด๋ฉํ๊ณ ์ ํ๋ useQuery ๋ถ๋ถ์์ ์์ useQuery ์์ ์ฒ๋ผ ์ต์ ์ ์ค์ ํ๋ฉด ๋ฉ๋๋ค.
ํด๋ง ๊ธฐ๋ฒ์ ์ด์ฉํ ์๋ refetch
ํด๋ง ๊ธฐ๋ฒ์ด๋ ๋ฌด์์ธ๊ฐ์?
๐ก ๋ฆฌ์ผํ์ ์น์ ์ํ ๊ธฐ๋ฒ์ผ๋ก, ์ผ์ ํ ์ฃผ๊ธฐ๋ก ์๋ฒ์ ์๋ต์ ์ฃผ๊ณ ๋ฐ๋ ๋ฐฉ์์ ํด๋ง ๊ธฐ๋ฒ์ด๋ผ๊ณ ํฉ๋๋ค.
์์ ์์ ์์ ์ต์ ์ ์ค์ ํ๋ฉด ์ผ์ ํ ์ฃผ๊ธฐ๋ก refetch๋ฅผ ์ํํฉ๋๋ค.
refetchInterval: 60000 // 1๋ถ๋ง๋ค ์๋์ผ๋ก refetch
๐คทโ๏ธ ๋ง๋ฌด๋ฆฌํ๋ฉด์..
react-query๋ฅผ ํ์ฉํ๋ฉด react์ ์ฑ๋ฅ์ ํฅ์์ํค๊ณ ์ฌ์ฉ์์๊ฒ ๋ ์ข์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ๋ํ, refetch์ ๋ํด ์์ธํ ์์๋ณด๋ฉด์ react-query๋ฅผ ๋์ฑ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ์ต๋๋ค.
์ฌ๋ฐ๋ ์ค๋์ ๋ ๋ณ ์ด์ธ ๋ณด๊ณ ๊ฐ์ธ์!
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
https://cometruedream.tistory.com/250