Closed un0211 closed 1 week ago
์ ํฌ ๊ฐ์ด ๊ณ ๋ฏผํด๋ดค๋ ๊ฑฐ๋, ๊ฐ์ธ์ ์ผ๋ก ์ด๋ ค์์ ๋ง์ด ๊ณ ๋ฏผํ๊ณ ํด๊ฒฐํด๋ณธ ๋ฌธ์ ์ฌํญ๋ค๋ ๋ค์ด๊ฐ๋ฉด ์ข์ ๊ฒ ๊ฐ์์! ์ฑ๋ฆฐ์งํ๋ ๊ฒฝํ๋ ์ ๋ฆฌ๋๊ณ , ์ด๋ฐ ๋ฐํ์์ ์ด๋ฐ ๊ณผ์ ์ ๋ด๋ ๊ฒ ์ข์ ๊ฒ ๊ฐ๋ค์ ๐
React Query๋ ๋ฐ์ดํฐ์ ์บ์ฑ์ ํตํด ํจ์น ํจ์จ์ฑ์ด ๋์ง๋ง, ์ด ๋๋ฌธ์ ์ด์ ๋ฐ์ดํฐ๊ฐ ์ ์ ๋์ ํ์๋ ํ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ๋ก๋๋๋ ํ์์ด ๋ฐ์ํ ์ ์๋ค(์ฌ์ง๊ณผ ๊ฐ์ด ๋๊ธ ์น์ ์ด ๊น๋นก๊ฑฐ๋ฆฌ๋ ๋ฌธ์ ์ ๊ฐ๋ค). ์ ์ ๋ค์๊ฒ๋ ๋๊ธ ์น์ ์ด ๊น๋นก๊ฑฐ๋ฆฌ๋ ๊ฒ์ฒ๋ผ ๋ณด์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ๋จ์ดํธ๋ฆฐ๋ค.
(๋ฉํ ๋์ ํผ๋๋ฐฑ๐)
Tanstack Query(๊ตฌ React Qeury)์ useQueryํ ์ refetch ํจ์ ์ฌ์ฉ
refetch
๋ React Query์์ ์ ๊ณตํ๋ ํจ์๋ก, ์ด๋ฏธ ์คํ๋ ์ฟผ๋ฆฌ๋ฅผ ๋ค์ ์คํํด ์ต์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉํ๋ค. ํน์ ์์ ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ๋ก ๋ค์ ๊ฐ์ ธ์์ผ ํ ๋ ๋งค์ฐ ์ ์ฉํ๊ณ , ์ ์ ์ํธ์์ฉ์ ์ํด ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ ์์ฃผ ์ฌ์ฉ๋๋ค.
// useFetchData ์ปค์คํ
ํ
(useQuery ๋ฐํ)์์ refetch ํจ์๋ฅผ ๋ฐ๋๋ค.
// ์ฌ๊ธฐ์ ๊ฐ ๋๊ธ๋ค์ ๊ฐ ์นด๋์ ๊ณ ์ ํ id๊ฐ์ ์ฟผ๋ฆฌํค๋ก ๋ฑ๋กํด ํจ์นํ๋ค.
const { data, refetch } = useFetchData<CommentsResponse>(['comments', card.id], () => getComments(card.id));
// useEffect ํ ์ผ๋ก ๋ชจ๋ฌ์ด ์ด๋ฆด ๋๋ง๋ค refetch๋ฅผ ํธ์ถํด ๋๊ธ ๋ฐ์ดํฐ๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ๋ค. useEffect(() => { refetch();
return () => {
// ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ ๋ ๋, ํด๋ฆฐ์
์ ํตํด ๋๊ธ ์ฟผ๋ฆฌ๋ฅผ ์ทจ์์์ผ ๋ถํ์ํ API ์์ฒญ์ ๋ฐฉ์งํ๋ค.
queryClient.cancelQueries({ queryKey: ['comments', card.id] });
};
}, [refetch, queryClient, card.id]);
### ํด๊ฒฐ ๊ฒฐ๊ณผ
<img src="https://velog.velcdn.com/images/wayandway/post/fb8cf0b2-c0f7-4144-9c3b-967d618dad7e/image.gif" width=300 />
์นด๋๋ชจ๋ฌ์ ๋์ธ ๋๋ง๋ค ๋ ์ด์ ๋๊ธ ๋ฐ์ดํฐ๋ค์ด ๊น๋นก๊ฑฐ๋ฆฌ์ง ์๊ณ , ์ ์์ ์ผ๋ก ๋ฆฌํจ์น๋๋ค.
์์ ์ค๋ช
๋ฐํ์(๋์๋)๊ฐ ๋ฐํ ์ค๋น๋ฅผ ์์ํ ํ ์ ์๊ฒ ๋ฏธ๋ฆฌ ์๋ฃ๋ฅผ ์ค๋นํ๋ ์์ ์ ๋๋ค.
์ธ๋ถ ์์ ๋ชฉ๋ก
์ฝ๋ฉํธ (optional)
๋๋ต ์ ์ด๋ณด์๋๋ฐ ๋ค๋ค ์๊ฒฌ์์ผ๋ฉด ์ผ๋ง๋ ์ง ์์ ํด์ฃผ์ธ์! ํนํ ๋์๋ ํ์ํ ์ ๋ณด ๊ตฌ์ฒด์ ์ผ๋ก ๋ ์ ์ผ์ ๋ ์ข์์~ (๋ ์ง ์์๋ก 7/5-6 ์ง์ ํ์ต๋๋ค! ๋์๋ 6-7 ์๋ฃ์ค๋นํ์๊ณ 7์ผ๋ ๊ฐ์ด ์ ๊ฒํด๋ณด๋๊ฒ ์ด๋จ๊น ํด์!)