๋ฌธ์ ์ 1. ์บ์(cache)๊ฐ ์๋จ
๋ฌธ์ ์ 2. ์ฌ์๋(retry) ๊ธฐ๋ฅ ์์
const query = useQuery({ queryKey: ['todos'], queryFn: fetchTodos });
const {
data,
isLoading,
error,
} = useQuery(['exampleKey'], async () => {
console.log('fetching in useQuery...');
return fetch('exampleAPI').then((res) => res.json());
});
exampleKey
๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ๋๋ฒ์งธ ์์ฒญ์์ fetch ๋ฐ์ํ์ง ์๊ณ ์บ์ฑ๋ ๋ฐ์ดํฐ ๊ฐ์ ธ์ด// key๊ฐ์ผ๋ก 'example' ๊ฐ์ง๋ฉด ๊ฐ์ ์บ์ ์ฌ์ฉ
useQuery({ queryKey: ['example'], ... })
// 'example' + ์ธ๋ถ ์ํ๋ก ๋ค์ํ key ์กฐํฉํด์ ๋ค๋ฅธ ์บ์ ์ฌ์ฉ
// ์๋ ์ธ๊ฐ์ง ์์ ๋ชจ๋ ์๋ก ๋ค๋ฅธ ์บ์ ์ฌ์ฉ
useQuery({ queryKey: ['example'], ... })
// An individual example
useQuery({ queryKey: ['example', 5], ... })
// An individual todo in a "preview" format
useQuery({ queryKey: ['example', 5, { preview: true }], ...})
const [checked, setChecked] = useState(false);
const { data, isLoading, error }
// checked ์ฌ๋ถ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋คํธ์ํฌ ์์ฒญ์ ํ๋ฏ๋ก key์ ์ถ๊ฐ
= useQuery(['exampleKey', checked], async () => {
console.log('fetching in useQuery...');
return fetch(`${checked?'sale_':''}/exampleAPI`).then((res) => res.json());
});
const handleChange = () => setChecked((prev) => !prev);
- checked ์ฌ๋ถ์ ๋ฐ๋ผ key ๊ฐ์ด
['exampleKey', false]
,['exampleKey', true]
๋ก ์บ์ฑ๋ ๊ฒ- ๊ทธ๋ฌ๋ฉด ๋ก๋ฉ๋ ๋, ์ฒ์ ์ฒดํฌํ ๋๋ง fetch๊ฐ ๋ฐ์ํด์ผ ํ ํ ๋ฐ..
- ์ ์ํ ๋ฐ๋๋๋ง๋ค fetch ๋ฐ์...?
์ด๋ useQuery ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ฉด ์ฆ์ ์ค๋๋(stale) ๋ฐ์ดํฐ ์ํ๊ฐ ๋๊ธฐ ๋๋ฌธ
useQuery์ ์ธ๋ฒ์งธ ์ธ์์ธ options๋ก ์ ์ด ๊ฐ๋ฅ ๊ด๋ จ ํฌ์คํ
๋ณด๋ฌ๊ฐ๊ธฐ๐ค