useQuery
์ผ์ง๋ง ๊ณ์ ๋คํธ์ํฌ ํต์ ํตํด ์๋ก ๋ฐ์์ดuseQuery
ํน์ useInfiniteQuery
๋ฅผ ์ฌ์ฉํด ์บ์๋ ๋ฐ์ดํฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก stale ์ํstaleTime
์ต์
์ง์ fresh
-> stale
์ํ๋ก ๋ณ๊ฒฝ๋๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐfresh
์ํ์ผ ๋ ๊ฐ์ key ๊ฐ์ ๊ฐ์ง๋ ์๋ก์ด query๊ฐ ์์ฑ๋๋ฉด ๋คํธ์ํฌ ํต์ Xstale
์ํ์ผ ๋ ๊ฐ์ key ๊ฐ์ ๊ฐ์ง๋ ์๋ก์ด query๊ฐ ์์ฑ๋๋ฉด ๊ธฐ์กด์ ์บ์๋์ด์๋ ๊ฒ์ด UI ์์ผ๋ก ๋ฐ๋ก ๋ณด์ฌ์ง๊ธฐ๋ ํ์ง๋ง,staleTime ๊ธฐ๋ณธ๊ฐ(0)์ผ ๋ ์๋์ผ๋ก ๋คํธ์ํฌ ํต์ (refetch) ํ๋ ๊ฒฝ์ฐ
staleTime
5์ด๋ก ์ง์ const [checked, setChecked] = useState(false);
const { data, isLoading, error }
= useQuery(['exampleKey', checked], async () => {
console.log('fetching in useQuery...', checked);
return fetch(`${checked?'sale_':''}/exampleAPI`).then((res) => res.json());
}, {
// options ์ถ๊ฐ
staleTime: 5000,
});
const handleChange = () => setChecked((prev) => !prev);
['exampleKey', false]
, ['exampleKey', true]
๋ก ๊ฐ๊ฐ ์บ์ฑstaleTime
5์ด๋ก ์ค์ ํด๋๊ธฐ ๋๋ฌธ์, 5์ด๋์ fresh
์ํstale
์ํ๋ก ๋ณ๊ฒฝ๋จfresh
์ํ๋ก ๋ณ๊ฒฝ๋จinactive
์ํ๋ก ๋ณ๊ฒฝ๋๊ณ , ์บ์์ ์ ์ง๋๋ ์๊ฐinactive
: query ์์ฒญ์ด ๋๋๊ณ ๋ฐ์ดํฐ๊ฐ ํ์ฌ ์ปดํฌ๋ํธ๋ ์ดํ๋ฆฌ์ผ์ด์
์ ํ๋ฉด์ ํ์๋์ง ์๊ฑฐ๋ ์ฌ์ฉ๋์ง ์๋(ํ์ฑํ๋์ง ์์) ์ํcacheTime
์ด ๋๋๋ฉด ๊ฐ๋น์ง ์ฝ๋ ํฐ๋ก ์์ง๋จcacheTime
์ด ๋๋๊ธฐ ์ ์ query ๋ค์ ์์ฒญ ๋๋ฉด, fresh
ํ ๋ฐ์ดํฐ๋ฅผ fetchํ๋ ๋์ ๊ธฐ์กด ์บ์ ๋ฐ์ดํฐ ๋ณด์ฌ์คstaleTime
๊ณผ ์๊ด์์ด ๋ฐ์ดํฐ๊ฐ inactive
๋ ์์ ์ ๊ธฐ์ค์ผ๋ก ์บ์ ์ญ์ ๊ฒฐ์ staleTime vs cacheTime
cacheTime
์ ๋ฐ์ดํฐ๊ฐ ์บ์์ ์ผ๋ง๋ ์ค๋ ์ ์ง๋ ์ง ์ค์
staleTime
์ ์บ์๋ ๋ฐ์ดํฐ๊ฐ ์ผ๋ง๋ ์ค๋stale
์ํ๋ก ์ ์ง๋ ์ง ์ค์
staleTime
์ดcacheTime
๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ผ ํจ
๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฐ์ดํฐ๊ฐ ์บ์๋์ด๋ ๋น๋ฒํ ์ ๋ฐ์ดํธ๊ฐ ๋ฐ์โ
fresh
์ํ์์ staleTime
(๊ธฐ๋ณธ๊ฐ: 0) ์ดํ stale
๋ก ์ํ ๋ณ๊ฒฝcacheTime
์ด ์ง๋๊ธฐ ์ ์,(1) : ๊ฐ์ key๊ฐ์ ๊ฐ์ง๋ ์๋ก์ด ์์ฒญ ์ค๋ฉด
(2) : ํด๋น key๊ฐ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์บ์ฑ๋ผ์์ผ๋ฏ๋ก ๊ธฐ์กด ๋ฐ์ดํฐ ๋ฐ๋ก ๋ณด์ฌ์ค
(3) : ํ์ง๋ง, ์ํ๊ฐ stale
์ด๋ฏ๋ก ๋คํธ์ํฌ ํต์ ํตํด ์๋ก์ด ๋ฐ์ดํฐ ์์ฒญํจ
(4) : ๋คํธ์ํฌ ํต์ ํตํด ์บ์์ ์๋ก์ด ๋ฐ์ดํฐ๋ก ์
๋ฐ์ดํธ
(5) : ์๋ก ๋ฐ์์จ ๋ฐ์ดํฐ์ ๋ฌ๋ผ์ง ๋ถ๋ถ ์
๋ฐ์ดํธํด์ ๋ณด์ฌ์ค
cacheTime
๋งํผ ์ ์ง๋๋ค๊ฐ ๊ฐ๋น์ง ์ฝ๋ ํฐ๋ก ์์ง๋จ