
โ๏ธ Server State
โ๏ธ state (์ํ)
- React์์๋ ๋ ๋๋ง์ ์ํฅ์ ๋ฏธ์น๋ ์๋ฐ์คํฌ๋ฆฝํธ Object ๋ผ๊ณ ์ ์.
- Global State (์ ์ญ ์ํ) ๋ ์ดํ๋ฆฌ์ผ์ด์
์ด๋์์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํจ.
- ๋ํ ์ ์ญ ์ํ์ ๋ณํ๋ ๊ณง ์ ํ๋ฆฌ์ผ์ด์
์ ๋ ๋๋ง์ ์ ๋ฐ์ ์ผ๋ก ์ํฅ์ ๋ฏธ์นจ.
โ๏ธ Client State
- UI ํ
๋ง, ์ฌ์ด๋๋ฐ, ํผ ์
๋ ฅ ๋ฑ๊ณผ ๊ฐ์ด ํด๋ผ์ด์ธํธ๊ฐ ์์ ํ๊ณ ์ ์ดํ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธ.
- ํด๋ผ์ด์ธํธ์์ ํญ์ ์ ์ด๊ฐ ๊ฐ๋ฅํ๊ธฐ์ ํญ์ ๋๊ธฐ์ ์ธ ์ํ๋ฅผ ๊ฐ์ง.
- local client state : ํผ ์
๋ ฅ, ์ฌ์ด๋๋ฐ ๊ฐ์ด ํ๋ ๋๋ ์ธ์ ํ ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ๋ state.
- global client state : ์ธ์ด, UI ํ
๋ง (๋คํฌ ๋ชจ๋) ์ ๊ฐ์ด ์ดํ๋ฆฌ์ผ์ด์
์ ์ ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ state.
โ๏ธ Server State
- ์ ์ DB ์ ๋ณด ๋ฑ๊ณผ ๊ฐ์ด ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก๋ถํฐ ๋ฐ์์ค๋ ๋ชจ๋ ๋ฐ์ดํฐ ๋ฅผ ์๋ฏธํจ.
- ํด๋ผ์ด์ธํธ๊ฐ ์ ์ดํ๊ณ ๊ด๋ฆฌํ ์ ์๊ธฐ์ ํน์ ์์ ์ผ๋ก๋ถํฐ ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํจ. ์ด๋ก ์ธํด ๋น๋๊ธฐ์ ์ธ ์ํ๋ฅผ ๊ฐ์ง.
- ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ state๊ฐ ํญ์ ์ผ์นํ๋ค๋ ๋ณด์ฅ์ด ์์ผ๋ฉฐ, ํด๋ผ์ด์ธํธ์์ ๋ ์ด์ ์ ํจํ์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ๊ฐ๋ฅ์ฑ์ด ์์.
๐ชถ React-Query๋?
react-query๋ ์๋ฒ ์ํ ๊ฐ์ ธ์ค๊ธฐ, ์บ์ฑ, ๋๊ธฐํ ๋ฐ ์
๋ฐ์ดํธ๋ฅผ ๋ณด๋ค ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
์นด์นด์คํ์ด ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ค์ด react query๋ฅผ ์ฌ์ฉํ ์ด์
๐ ใif(kakao)2021 - ์นด์นด์คํ์ด ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ค์ด React Query๋ฅผ ์ ํํ ์ด์ ใ ์ธ์ค์์ฝ ๐ค
1. React Query๋ React Application์์ ์๋ฒ ์ํ๋ฅผ ๋ถ๋ฌ์ค๊ณ , ์บ์ฑํ๋ฉฐ, ์ง์์ ์ผ๋ก ๋๊ธฐํํ๊ณ ์
๋ฐ์ดํธํ๋ ์์
์ ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค.
2. ๋ณต์กํ๊ณ ์ฅํฉํ ์ฝ๋๊ฐ ํ์ํ ๋ค๋ฅธ ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ ๋ฐฉ์๊ณผ ๋ฌ๋ฆฌ React Component ๋ด๋ถ์์ ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ผ๋ก API๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
3. ๋ ๋์๊ฐ React Query์์ ์ ๊ณตํ๋ ์บ์ฑ, Window Focus Refetching ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ API ์์ฒญ๊ณผ ๊ด๋ จ๋ ๋ฒ์กํ ์์
์์ด โํต์ฌ ๋ก์งโ์ ์ง์คํ ์ ์์ต๋๋ค.
โ๏ธ ์ด๊ฑธ ์ ์จ์ผ ํ๋๊ฐ?
1. React ์์๋ ๋ฐ์ดํฐ๋ฅผ fetching ํ๊ฑฐ๋ update ํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง ์๋๋ค.
- ๋ฐ๋ผ์ ๊ฐ๋ฐ์๋ค์ ๊ฐ์์ ๋ฐฉ์๋๋ก ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ fetching ํ๋ ๋ฐฉ์์ ์ค๊ณํ์๋ค.
- ๋ณดํต์ Custom Hook์ ํ์ฉํ์ฌ state์ ๊ฐ์ ์ ๋ฌํ๊ฑฐ๋, Redux ๊ฐ์ ์ ์ญ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ธ๊ณ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
2. Client state์ Server state์ ์์ ํ ๋ถ๋ฆฌ ๋ฅผ ์ํจ์ด๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ์๋ฒ์์ ๋ฐ์์จ server state์ ๊ฒฝ์ฐ ์ ์ญ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ค. ์๋ํ๋ฉด state๋ฅผ ํ์๋ก ํ๋ ์ปดํฌ๋ํธ์์ ๊ฐ๋ณ์ ์ผ๋ก API ํธ์ถ์ ํ๋ ๊ฒ์ ํฐ ๋น์ฉ ๋ญ๋น์ด๊ธฐ ๋๋ฌธ์ด๋ค.
- ํ์ง๋ง ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ state๋ฅผ ๊ณต์ ํ๋ ค props drilling ์ ์ฌ์ฉํ๋ ๊ฒ๋ ํ๊ณ๊ฐ ์๊ธฐ์, ์ ์ญ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ์์ ์ธ๊ณ๋ฐ์ server state๋ฅผ ๋ง์น cache ์ฒ๋ผ ๊ด๋ฆฌํ๋ค๋ฉด ํจ์ฌ ์ ๊ทผ์ด ์ฉ์ดํด์ง๋ค.
- ๊ทธ๋ฌ๋ Redux ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ์ํ ๊ด๋ฆฌ๋ฅผ ํ๊ธฐ ์ํด ๋ณ๋์ ์์
(Redux-Saga) ์ด ํ์ํ๊ณ , ์ด๋ก ์ธํด ๊ด๋ จ ๋ก์ง ๋ฐ ๋ชจ๋์ด ๋น๋ํด์ง๋ค.
- react-query์ ๊ฒฝ์ฐ Server State์ ๊ด๋ จ๋ ์์
์ ์๋ฒฝํ ๊ตฌ๋ถ์ง์ด ์ ๊ณตํ๊ธฐ์, Client State ๊น์ง ๋ด๋นํ๋ ์ ์ญ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก๋ถํฐ ์ด๋ฅผ ๋ถ๋ฆฌํด์ค๋ค.
3. Server State ๋ ํญ์ ์ต์ ์ ์ํ์์ ๋ณด์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ ์ญ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฝ์ฐ, ์๋ฒ์ ๋ฐ์ดํฐ์ ๋ค๋ฅธ ๊ฐ์ ๋ณด์ ํ ์๋ ์๋ค. ๊ทธ์ ๋ํ ์ด์ ๋ ์์ ๋งํ server state์ ๋น๋๊ธฐ์ ์ธ ํน์ฑ ๋๋ฌธ์ด๋ค.
- ์๋ฒ์์ ๋ฐ์์จ ๋ฐ์ดํฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ ์๊ฐ์ "์ค๋
์ท" ์ ๋ถ๊ณผํ๋ค. ๋ฐ๋ผ์ ๋ช
์์ ์ผ๋ก fetching์ ํด์ค์ผ ์ต์ ์ ๋ฐ์ดํฐ๋ก ์ ํ๋๋๋ฐ, ์ด๋ฌํ ์์
์ ์ฌ๋ฌ๋ฒ ์ํํ๊ธฐ์๋ ๋น์ฉ์ด ํฌ๋ค.
- react-query์ ๊ฒฝ์ฐ state์ ์ํ๋ฅผ fresh, stale, inactive๋ก ๊ตฌ๋ถ์ง์ผ๋ฉฐ ์ ํจํ์ง ์์ ์ํ๋ผ๋ฉด ๋ฐฑ๊ทธ๋ผ์ด๋ ๋จ์์์ ๋ฐ์ดํฐ๋ฅผ refetching ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
4. react-query๋ฅผ ํตํด Server state๋ฅผ ํจ์ฌ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์๋ค.
- react query์ ๊ฒฝ์ฐ ์๋์ ๊ธฐ๋ฅ์ ์ง์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ฉฐ, ๋ก์ง ๋ํ ๋จ์ํ ์ถ์ ์ํ๋ค.
- ํ์ฌ ๋ฐ์ดํฐ๊ฐ fetching ๋์๋์ง, ์๋๋ฉด ์ค๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋์ง๋ฅผ ์ฝ๊ฒ ์ฒดํฌํ ์ ์๋ค.
- ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์บ์ฑ
- ๋์ผํ ๋ฐ์ดํฐ์ ๋ํ ์ฌ๋ฌ ์์ฒญ์ ๋จ์ผ ์์ฒญ์ผ๋ก ๋ณํ
- ๋ฐฑ๊ทธ๋ผ์ด๋ ๋จ์์ ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์
๋ฐ์ดํธ
- ๋ฐ์ดํฐ๊ฐ ํ์ฌ ์ค๋๋ (stale) ์ํ๋ก ๋ณํ๋์ง๋ฅผ ํ์ธ.
- ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ , GC์ ์ํด ์๊ฑฐ๋๋ ๊ณผ์ ๋ ๊ด์ฐฐ.
โ๏ธ What is Query?
โ๏ธ React Query ์์ ์ฟผ๋ฆฌ๋ ๋ฌด์์ ์๋ฏธํ๋๊ฐ?
- Query๋ Server state๋ฅผ ์์ฒญํ๋ ํจ์ (QueryFn) ๊ณผ ํจ๊ป ๊ณ ์ ํ ํค (QueryKey) ๋ก ๋งคํ๋๋ค.
- ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๊ฒฝ์ฐ์๋ useQuery, useInfiniteQuery Hook์ ์ด๋ค.
- ๋จ, ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ๊ฒฝ์ฐ์๋ useMutation Hook์ ์ฌ์ฉํด์ผ ํ๋ค.
โ๏ธ queryKey์ queryFn์ ๋ํ์ฌ.

- queryKey ๋ refetch, caching ๋ฑ๊ณผ ๊ฐ์ ์์
์ ํ ๋ ์ฐ์ด๋ ๊ณ ์ ํ ํค๋ค. v4 ๋ถํฐ๋ ๋ฐฐ์ด๋ก๋ง key๋ฅผ ์ ์ธํด์ผ ํ๋ค.
- queryFn ์ ๊ฒฝ์ฐ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด ์ฐ์ด๋ ๋น๋๊ธฐ ํจ์๋ฅผ ์๋ฏธํ๋ฉฐ ๋ฐ๋์ Promise๋ฅผ ๋ฆฌํดํด์ผ ํ๋ค.
๋ด ์ฝ๋์์ ๋ณด๋ ๋ฆฌ์กํธ์ฟผ๋ฆฌ ์ ์ฉ
const postQuery = useQuery({
queryKey: ['postData', postId],
queryFn: fetchPostData,
enabled: !!postId,
});
- queryKey: ์ฟผ๋ฆฌ๋ฅผ ์๋ณํ๋ ๊ณ ์ ํค์
๋๋ค. ๋ฐฐ์ด ํ์์ผ๋ก ์ค์ ํฉ๋๋ค.
- queryFn: ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ํจ์์
๋๋ค.
- enabled: ํน์ ์กฐ๊ฑด์์๋ง ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋๋ก ํฉ๋๋ค.
์ข์์/์ข์์ ์ทจ์ ๊ตฌํ
์ข์์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด useMutation ํ
์ ์ฌ
์ด๋ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ์์
์ ์ฒ๋ฆฌ
likeMutation๊ณผ dislikeMutation
์ข์์ ์ถ๊ฐ ๋ฐ ์ทจ์๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฎคํ
์ด์
ํจ์์
๋๋ค.
์ฑ๊ณต ์ ๊ด๋ จ๋ ์ฟผ๋ฆฌ๋ฅผ ๋ฌดํจํํ์ฌ ์ต์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
const likeMutation = useMutation({
mutationFn: async () => {
const response = await axios.post(
`${IP_ADDRESS}/board/like`,
{ email: myEmail, postId: postId },
{
headers: {
'Content-Type': 'application/json;charset=UTF-8',
Accept: 'application/json',
'Authorization-Access': accessToken,
},
}
);
return response.data;
},
onSuccess: () => {
queryClient.invalidateQueries(['postData', postId]);
queryClient.invalidateQueries(['likedPosts']);
},
onError: handleError,
});
const dislikeMutation = useMutation({
mutationFn: async () => {
const response = await axios.post(
`${IP_ADDRESS}/board/dislike`,
{ email: myEmail, postId: postId },
{
headers: {
'Content-Type': 'application/json;charset=UTF-8',
Accept: 'application/json',
'Authorization-Access': accessToken,
},
}
);
return response.data;
},
onSuccess: () => {
queryClient.invalidateQueries(['postData', postId]);
queryClient.invalidateQueries(['likedPosts']);
},
onError: handleError,
});
onSuccess ์ต์
์ ๋ฎคํ
์ด์
์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์์ ๋ ์คํ๋๋ค.
์ฌ๊ธฐ์๋ queryClient.invalidateQueries๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์ฟผ๋ฆฌ๋ฅผ ๋ฌดํจํ(invalidate)
- ๋ฌดํจํ๋ ์ฟผ๋ฆฌ๋ ๋ค์ ๋ฒ์ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ ๋๋ ์ฟผ๋ฆฌ๊ฐ ํ์ฑํ๋ ๋ ์๋์ผ๋ก ๋ค์ ํ์นญ๋ฉ๋๋ค.
onSuccess: () => {
queryClient.invalidateQueries(['postData', postId]);
queryClient.invalidateQueries(['likedPosts']);
}
queryClient.invalidateQueries
์ด ํจ์๋ ์ง์ ๋ ์ฟผ๋ฆฌ ํค๋ฅผ ๊ฐ์ง ์ฟผ๋ฆฌ๋ฅผ ๋ฌดํจํํฉ๋๋ค. ๋ฌดํจํ๋ ์ฟผ๋ฆฌ๋ ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , ๋ค์ ํ์นญ์ ์๋ํฉ๋๋ค.
queryClient.invalidateQueries(['postData', postId])
- ['postData', postId] ์ฟผ๋ฆฌ ํค๋ฅผ ๊ฐ์ง ์ฟผ๋ฆฌ๋ฅผ ๋ฌดํจํํฉ๋๋ค.
- ์ด ๊ฒฝ์ฐ, ๊ฒ์๊ธ์ ์์ธ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋
๋๋ค. ๊ฒ์๊ธ์ ์ข์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ทจ์ํ๋ฉด, ๊ฒ์๊ธ์ ์์ธ ์ ๋ณด๋ ๊ฐฑ์ ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด ์ฟผ๋ฆฌ๋ฅผ ๋ฌดํจํํฉ๋๋ค.
queryClient.invalidateQueries(['likedPosts'])
- ['likedPosts'] ์ฟผ๋ฆฌ ํค๋ฅผ ๊ฐ์ง ์ฟผ๋ฆฌ๋ฅผ ๋ฌดํจํํฉ๋๋ค.
- ์ฌ์ฉ์๊ฐ ์ข์์๋ฅผ ๋๋ฅธ ๊ฒ์๊ธ ๋ชฉ๋ก์ ๋ํ๋
๋๋ค. ์ข์์ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด, ์ด ๋ชฉ๋ก๋ ๊ฐฑ์ ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด ์ฟผ๋ฆฌ๋ฅผ ๋ฌดํจํํฉ๋๋ค.
๋ฌดํจํ์ ํจ๊ณผ
๋ฌดํจํ๋ ์ฟผ๋ฆฌ๋ ๋ค์ ๋ฒ ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋๊ฑฐ๋ ์ฟผ๋ฆฌ๊ฐ ํ์ฑํ๋ ๋ ์๋์ผ๋ก ๋ค์ ํ์นญ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ต์ ๋ฐ์ดํฐ๊ฐ ๋ฐ์๋์ด ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋๋ค.
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ๊ฒ์๊ธ์ ์ข์์๋ฅผ ๋๋ ์ ๋:
- postData ์ฟผ๋ฆฌ๋ฅผ ๋ฌดํจํํ๋ฉด, ๊ฒ์๊ธ์ ์์ธ ๋ฐ์ดํฐ๊ฐ ๋ค์ ํ์นญ๋์ด ๊ฐฑ์ ๋ ์ข์์ ์๋ฅผ ๋ฐ์ํฉ๋๋ค.
2.likedPosts ์ฟผ๋ฆฌ๋ฅผ ๋ฌดํจํํ๋ฉด, ์ฌ์ฉ์๊ฐ ์ข์์๋ฅผ ๋๋ฅธ ๊ฒ์๊ธ ๋ชฉ๋ก์ด ๋ค์ ํ์นญ๋์ด ๊ฐฑ์ ๋ ๋ชฉ๋ก์ ๋ฐ์ํฉ๋๋ค.
mutate
mutate๋ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ์ useMutation ํ
์์ ์ ๊ณตํ๋ ํจ์
์ ์๋ ๋ฎคํ
์ด์
(๋ฐ์ดํฐ ๋ณ๊ฒฝ) ์์
์ ํธ๋ฆฌ๊ฑฐ(์คํ)ํฉ๋๋ค. mutate ํจ์๋ ๋น๋๊ธฐ ์์
์ ์ํํ๊ณ , ์ฑ๊ณตํ๊ฑฐ๋ ์คํจํ ๋ ํน์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์คํํฉ๋๋ค.
toggleLike ํจ์์์์ mutate ์ฌ์ฉ
- toggleLike ํจ์๋ ์ข์์ ์ํ๋ฅผ ํ ๊ธํ๋ ๊ธฐ๋ฅ์ ํฉ๋๋ค. ์ด ํจ์๋ Liked ์ํ์ ๋ฐ๋ผ ์ข์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ทจ์ํ๋ ๋ฎคํ
์ด์
์ ์คํํฉ๋๋ค.
- Liked๊ฐ true์ธ ๊ฒฝ์ฐ, ์ฆ ์ฌ์ฉ์๊ฐ ์ด๋ฏธ ์ข์์๋ฅผ ๋๋ฅธ ์ํ๋ผ๋ฉด, dislikeMutation.mutate()๋ฅผ ํธ์ถํ์ฌ ์ข์์๋ฅผ ์ทจ์ํฉ๋๋ค.
- Liked๊ฐ false์ธ ๊ฒฝ์ฐ, ์ฆ ์ฌ์ฉ์๊ฐ ์์ง ์ข์์๋ฅผ ๋๋ฅด์ง ์์ ์ํ๋ผ๋ฉด, likeMutation.mutate()๋ฅผ ํธ์ถํ์ฌ ์ข์์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
const toggleLike = () => {
if (Liked) {
dislikeMutation.mutate();
} else {
likeMutation.mutate();
}
};
useMutation์ ๋ฐํ ๊ฐ
- mutate: ๋ฎคํ
์ด์
์ ํธ๋ฆฌ๊ฑฐํ๋ ํจ์์
๋๋ค.
- mutateAsync: ๋ฎคํ
์ด์
์ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ํธ๋ฆฌ๊ฑฐํ๋ ํจ์๋ก, Promise๋ฅผ ๋ฐํํฉ๋๋ค.
- isLoading: ๋ฎคํ
์ด์
์ด ์คํ ์ค์ธ์ง๋ฅผ ๋ํ๋ด๋ ๋ถ์ธ ๊ฐ์
๋๋ค.
- isError: ๋ฎคํ
์ด์
์ด ์คํจํ๋์ง๋ฅผ ๋ํ๋ด๋ ๋ถ์ธ ๊ฐ์
๋๋ค.
- isSuccess: ๋ฎคํ
์ด์
์ด ์ฑ๊ณตํ๋์ง๋ฅผ ๋ํ๋ด๋ ๋ถ์ธ ๊ฐ์
๋๋ค.
- error: ๋ฎคํ
์ด์
์ด ์คํจํ์ ๋ ๋ฐ์ํ ์๋ฌ ๊ฐ์ฒด์
๋๋ค.
- data: ๋ฎคํ
์ด์
์ด ์ฑ๊ณตํ์ ๋ ๋ฐํ๋ ๋ฐ์ดํฐ์
๋๋ค.
(์์ง... ๋ ๋ด์ฉ ์ถ๊ฐํด์ผํจ..