๐ก ๋ค์ด๊ฐ๊ธฐ
์ด๋ค ๊ฒฝ์ฐ์ useQuery์ useMutation ์ฌ์ฉํ๋์ง,
๋ ํ์ ์ง์ ์ ๋ฐฉ์์ ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๋์ง ์ดํด๋ณด๋ฉด์ ๊ธฐ๋ฅ๊ฐ์ ์ ํ ์์ ์ ๋ฐํ์ผ๋ก ํด๋น ๋ด์ฉ์ ๊ณต์ ํ๋ ค ํ๋ค.
โ useQuery
react ๊ฐ๋ฐ์๋ผ๋ฉด ๋ชจ๋๊ฐ ์๊ณ ์๋ fetching, caching, ์๋ฒ ๋ฐ์ดํฐ์์ ๋๊ธฐํ๋ฅผ ์ง์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ผ ๊ฒ์ด๋ค.
useQuery์ ๋ฐ์ดํฐ ํ์ ์ ์๋์ ๊ฐ๋ค.
export declare function useQuery<
TQueryFnData = unknown,
TError = unknown,
TData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey>
(queryKey: TQueryKey, queryFn: QueryFunction<TQueryFnData, TQueryKey>,
options?: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
'queryKey' | 'queryFn' | 'initialData'> & {
initialData?: () => undefined;
}): UseQueryResult<TData, TError>;
- TQueryFnData ๐ useQuery ๋ก ์คํํ๋ query function์ return ๊ฐ์ ์ ํ๋ ์ ๋ค๋ฆญ ํ์
- TError ๐ query์ error ํ์์ ์ ํ๋ ์ ๋ค๋ฆญ ํ์
- TData ๐ data์ ๋ด๊ธฐ๋ ์ค์ง์ type, query function์ ๋ฐ์ดํฐ๋ฅผ 2์ฐจ ๊ฐ๊ณตํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ํ์
- TQueryKey ๐ useQuery์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ฃผ๋ queryKey์ ํ์
์ฟผ๋ฆฌํค์ ๊ฒฝ์ฐ์๋ ์๋์ ๊ฐ์ด ํ์ ์ง์ ์ด ๊ฐ๋ฅํ๋ค.
type QueryKey = string | readonly unknown[];
// queryKey๋ string ํน์ array ํ์
// ํ์ง๋ง query function์ ์ ๋ฌ ๋ฐฉ์์ ํญ์ array ํ์์ผ๋ก ์ ๋ฌ
// string => [string]
๊ทธ๋์ querykey์ ํ์ ์ ๊ฐ ๋ฐฐ์ด๋ง๋ค ์ด๋ค ๊ฐ์ด ๋ค์ด๊ฐ์ง ๋ช ์์ ์ผ๋ก ์ง์ ํด์ฃผ๊ณ function์ ๋๊ฒจ์ฃผ๊ณ ์ถ๋ค๋ฉด ์๋์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค.
useQuery<
unknown,
ErrorType,
void,
// โ
query key ์์๋๋ก ํ์
์ง์ ํ๊ธฐ
[string, string, number | undefined]
>
๋ณต์์ ์ฟผ๋ฆฌํค์ ๋์ํด์ query key์ ํ์ ์ ์ง์ ํ ์ ์๋ค.
โ useMuataion
useMutation์ ํตํด data๋ฅผ POST, PUT, UPDATE, DELETE ํ ์ ์๋ค.
์ด๋ฅผ ํตํด ๊ฐ์ ๋ณ๊ฒฝํ ๋ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, useQuery์๋ ๋ค๋ฅด๊ฒ ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก ๋น๋๊ธฐ ํจ์๊ฐ ๋ค์ด๊ฐ๊ณ , ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก ์ํฉ ๋ณ ๋ถ๊ธฐ ์ค์ ์ด ๋ค์ด๊ฐ๋ค๋ ๊ฒ์ด ์ฐจ์ด์ ์ด๋ค.
useMutation์ ํ์ ์ ์ดํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
export declare function useMutation<
TData = unknown,
TError = unknown,
TVariables = void,
TContext = unknown,
>(
options: UseMutationOptions<TData, TError, TVariables, TContext>,
): UseMutationResult<TData, TError, TVariables, TContext>;
- TData ๐ mutation ๋น๋๊ธฐ ํจ์ ์คํ ๊ฒฐ๊ณผ ํ์ , onSuccess, data๋ก ํ์ฉ
- TError ๐ mutation ๋น๋๊ธฐ ํจ์ ์๋ฌ ๊ฒฐ๊ณผ ํ์ , onError, error๋ก ํ์ฉ
- TVariabales ๐ mutate ํจ์์ ์ ๋ฌํ๋ ์ธ์๋ฅผ ์ง์ ํ๋ generic ํ์
- TContext ๐ mutate ๋น๋๊ธฐ ํจ์ ์คํ ์ ์ ์ํ๋๋ onMutate callback์ ๋ฆฌํด ํ์
์ด๋ ๊ฒ query์ mutation ๋ด๋ถ์ ํ์ ์ ๋ช ํํ๊ฒ ์ง์ ํ๋ฉด, onSuccess / onError / mutate ๋ฑ๋ฑ ๋ถ๊ธฐ๋ณ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋
๋ช ํํ ํ์ ์ผ๋ก ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๊ฒ ๋๋ค.
์ฆ, ๋น๋๊ธฐ ์ํ๋ค์ ํ์ ์์ ์ฑ์ ๋ณด์ฅํ ์ ์๋ ๊ฒ์ด๋ค.
์์ธํ ํ์ ์์ ๋ค์ React query - ๊ณต์ ํํ์ด์ง๋ฅผ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค.
๐ ์๋ก์ด ์น ํ๊ฒฝ ๋ก๊ทธ์ธ ์๋ฆผ ๊ฐ์ ์์
์ค๊ณ ๋๋ผ ์น๋ก๊ทธ์ธ ์๋ฆผํก ๊ฐ์ ์ฌํญ ์์ ์ผ๋ก ๊ฐ์ ๋ก๊ทธ์์ ํ์ด์ง๋ฅผ ๋ถํ ํ๋ฉด์ useQuery์ useMutation์ ๋ถ๊ธฐ์ฒ๋ฆฌ๋ฅผ ํจ๊ป ์์ ํ์๋ค.
๐๋ฌธ์ ์ํฉ
์ค๊ณ ๋๋ผ ์น ๊ฑฐ๋ ๊ธฐ๋ฅ ์คํ ๋น์, ์ค๊ณ ๋๋ผ ์น ์ฌ์ดํธ์ ๋ก๊ทธ์ธ์ ์๋ํ๋ฉด ์นด์นด์คํก์ผ๋ก ์๋ฆผํก์ด ๋ฐ์ก๋๋ ๊ธฐ๋ฅ์ ์คํํ์๋ค.
ํ์ง๋ง, ์ด๋ค ์ํฉ์์๋ ๋จ์ํ ์น ๋ก๊ทธ์ธ๋ง ์งํํ๋ค๋ฉด ์๋ฆผํก์ด ๋ฐ์ก๋์๊ธฐ์ ํ๋ฃจ ์ฝ 1300๊ฑด ์ ์ก๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋ค.
์ด๋ ์ฌ์ฉ์์๊ฒ ๋ถํธํจ์ ๊ฐ์ ธ๋ค์ฃผ๋ ๊ฒ๊ณผ ๋์์ ๊ณผ๋น์ฉ๊น์ง ๋ฐ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ๋ค.
โณ ํ๋ก์ฐ
ํด๋น ๋ฌธ์ ๋ฅผ ๊ฐ์ ํ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ฑ ์ค์น ์ฌ๋ถ๋ฅผ ํ๋จํ์ฌ ์ฑ ํธ์๋ก ์น ๋ก๊ทธ์ธ ์๋ฆผ ์ ์ก ์งํ
- ์ฑ ํธ์ ์์ฒญ์ ์ฑ๊ณต์, ํด๋น ๋ก๊ทธ์ธ ์๊ฐ ํ์ ํ ๋ฒํผ ์ด๋ฒคํธ๋ก ๋ก๊ทธ์์ ์์ฒญ ์ฒ๋ฆฌ
- ์ฑ ํธ์ ์์ฒญ์ ์คํจ
- ์ต๊ทผ ์ ์ ๊ธฐ๋ก 5๊ฑด ์ฒดํฌ
- ํ์ฌ ๋ก๊ทธ์ธํ ์ ์ ์ ๋ณด์ ์ด๋ ฅ์ด ๋ค๋ฅด๋ค๋ฉด, ์๋ฆผํก ์ ์ก
- ๊ฐ๋ค๋ฉด, ์๋ฆผํก ๋ฏธ์ ์ก
๋ฐ๋ผ์ ์ํฉ์ ๋ ๊ฐ์ง๋ก ๋๋ ์ง๊ฒ ๋์๋ค.
- ์๋ฆผํก์ผ๋ก ๊ฐ์ ๋ก๊ทธ์์ ์ํค๊ธฐ ๐ user seq๋ง params์ผ๋ก ๋ค์ด์ด
- ์๋ฆผํก ๋ด๋ถ์ ๋ก๊ทธ์์ ๋ฒํผ ํด๋ฆญ
- ์ค๊ณ ๋๋ผ ์น์ฌ์ดํธ๋ก ์ด๋๋๋ฉด์ ๊ฐ์ ๋ก๊ทธ์์ ์งํ or ๋ก๊ทธ์ธ ๋ง๋ฃ ์๋ด
- ํ์ผ๋ก ์ด๋
- ์ฑํธ์๋ก ๋ก๊ทธ์ธ ์๊ฐ ํ์ธ ํ ๊ฐ์ ๋ก๊ทธ์์ ์ํค๊ธฐ ๐ user seq, date๊ฐ params์ผ๋ก ๋ค์ด์ด
- ์ฑํธ์ ์๋ฆผ ํด๋ฆญ
- ์ธ๋ถ ๋ธ๋ผ์ฐ์ ๋ก ์น์ด ์ด๋ฆฌ๋ฉด์ ๋ก๊ทธ์ธํ ์๊ฐ ์๋ด ๋ฐ ๋ก๊ทธ์์ ๋ฒํผ ๋ ธ์ถ
- ํด๋น ๋ฒํผ ํด๋ฆญ์, ๋ก๊ทธ์์ or ๋ก๊ทธ์ธ ๋ง๋ฃ ์งํ
- ํ์ผ๋ก ์ด๋
์ฌ๊ธฐ์ ๋ก๊ทธ์์์ ์งํํ๋ api ํธ์ถ ๊ฒฝ๋ก๋ ๋์ผํ๋ค.
๋ค๋ง, 1๋ฒ์ ๊ฒฝ์ฐ ์นํ์ด์ง๋ก ๋ค์ด์ค์๋ง์ ํต์ ์์ฒญ์ด ์งํ๋์ด์ผ ํ๊ณ 2๋ฒ์ ๊ฒฝ์ฐ์๋ ๋ก๊ทธ์์ ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ๋ก ํต์ ์์ฒญ์ด ์งํ๋์ด์ผ ํ๋ค๋ ๊ฒ์ด ์ฐจ์ด์ ์ด์๋ค.
๐ฅ ์ํ ์ฐฉ์ค / ํด๊ฒฐ ๋ฐฉ๋ฒ
๋ด๊ฐ ์๊ฐํ๋ ์ฒซ ๋ฒ์งธ ํด๊ฒฐ๋ฐฉ๋ฒ์
๊ฐ์ ํ์ด์ง ๋ด์์ params์ date์ ์กด์ฌ ์ฌ๋ถ๋ก ํด๋น api์ ๋ํ ํธ์ถ์ ์ ์ดํ๋ ๋ฐฉ๋ฒ
๋ก๊ทธ์์์ ์งํํ๋ api๋ฅผ ํธ์ถํ ๋, useQuery๋ฅผ ์ฌ์ฉํ์๊ธฐ์ ํด๋น ์กฐ๊ฑด์ผ๋ก ๋ถ๊ธฐ์ฒ๋ฆฌ๋ฅผ ํ์ฌ ๋ชจ๋ฌ์ ์ ์ดํ๋ ๊ฒ์ ๊ฐ๋ฅํ๊ธด ํ๋ค.
โ๏ธ ๋ค๋ง, useQuery์์์์ ์กฐ๊ฑด ๋ถ๊ธฐ & onSuccess์ ๋ํ ๋ถ๊ธฐ์ฒ๋ฆฌ & ๋ก๊ทธ์ธ ๋ง๋ฃ ๋ชจ๋ฌ ๋ถ๊ธฐ์ฒ๋ฆฌ ๋ฑ๋ฑ โ๏ธ
ํ ํ์ด์ง ๋ด์์ ๋๋ฌด ๋ง์ ์กฐ๊ฑด ๋ถ๊ธฐ๊ฐ ์ด๋ฃจ์ด์ง๋ ๊ฒ์ ๋ํ ๋ถํธํจ๊ณผ ์ฟผ๋ฆฌ ์์ ๋น์ฆ๋์ค ๋ก์ง ๋ถ๋ฆฌ์ ๊น๋ค๋ก์์ผ๋ก ํด๋น ๋ฐฉ๋ฒ์ ์๋ํ๋ค๊ฐ ์๋ชป๋จ์ ๊นจ๋ซ๊ฒ ๋์๋ค.
๊ทธ๋์ ๋ ๋ฒ์งธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ๋ค์์ด ๋์ถ๋์๋ค.
ํ์ด์ง๋ฅผ ๋ถ๋ฆฌํ์ฌ 1๋ฒ์ useQuery๋ก, 2๋ฒ์ useMutation์ ํ์ฉํ์ฌ api ํธ์ถ์ ์ ์ดํ๋ ๋ฐฉ๋ฒ
1๋ฒ์ ๊ฒฝ์ฐ, ํ์ด์ง ์ง์ ์ ์๋์ผ๋ก useQuery๋ฅผ ํธ์ถํ์ฌ, ๊ฐ์ ๋ก๊ทธ์์ ๊ฒฐ๊ณผ ๊ฐ์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค๋ค.
2๋ฒ์ ๊ฒฝ์ฐ, params์ผ๋ก๋ถํฐ date๋ฅผ ๊ฐ์ ธ์ ํด๋น ๋ก๊ทธ์ธ ์๊ฐ์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๊ณ , button์ ์ด๋ฒคํธ๋ก mutate๋ฅผ ์๋์ํฌ๋
๊ฐ์ ๋ก๊ทธ์์์ ์ํจํ ๋ฉ์ธ์ผ๋ก ์ด๋ํ๋ค.
์์ ๋ฐฉ๋ฒ์ผ๋ก ์น ๋ก๊ทธ์ธ ์๋ฆผ ๊ธฐ๋ฅ์ ๊ฐ์ ํ์๋ค.
๐ฅ๏ธ ์ฝ๋ ๋ฆฌํฉํ ๋ง
์ด์ ๋ํ ์์ ์ ์งํํ๋ฉด์, ์์ ์ธ๊ธํ๋ useQuery, useMutation์ ํ์ ์ ์ ํํ๊ฒ ์ง์ ํ๋ ๋ฐฉ์์ ํตํด ์์ ์ฑ์ ๊ฐํ์์ผฐ๋ค.
๋จผ์ , ํ์ ์ง์ ์ ์ useMutation์ ์ดํด๋ณด์.
export const useLogoutAppPushMutaion = (
key: string,
) => {
return useMutation(
['app-push-logout', userKey],
() => {
return postLogOut(userKey);
},
{
onSuccess: () => {
...
},
onError: (err) => {
// โ๏ธ err๋ unknownํ์์
๋๋ค.
const errorMeta = err.response.data.meta;
...
},
},
);
};
์์ ํฌ์คํ ํ [ ๋ฆฌ์กํธ ๊ฐ๋ฐ์์ ๋ฐ๋์ ์์์ผํ๋ JS - Typescript ] ์์๋ ์ ์ ์๋ฏ์ด unknownํ์ ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ํ์ ์ขํ๊ธฐ๊ฐ ํ์ํ๋ค. ๋ฐ๋ผ์ err์ ๋ํ ํ์ ์ขํ๊ธฐ ์ด์ ์๋ ํด๋น ๊ฐ์ฒด์ ํ๋กํผํฐ์ ์ ๊ทผํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค.
ํด๋น ๋ฌธ์ ๋ ํ์ ์ง์ ์ ํตํด ๋น ๋ฅด๊ฒ ํด๊ฒฐ ๊ฐ๋ฅํ๋ค.
๋ค์์ ์ดํด๋ณด์.
export const useLogoutAppPushMutaion = (
key: string,
// โ
ErrorType์ ์ง์
): UseMutationResult<unknown, ErrorType, void> => {
return useMutation(
['app-push-logout', userKey],
() => {
return postLogOut(userKey);
},
{
onSuccess: () => {
...
},
onError: (err) => {
// โ
err์ type ๐ ErrorType
const errorMeta = err.response.data.meta;
...
},
},
);
};
mutation์ ํ์ ์ ์ ํํ๊ฒ ์ง์ ํด์ค์ผ๋ก์จ onError๊ฐ ๋ฐํํ๋ err ๊ฐ์ฒด์ ํ์ ์ขํ๊ธฐ ์์ด ๋ฐ๋ก ErrorType์ ํ๋กํผํฐ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํด์ก๋ค.
๐ ์ ๋ฆฌํ๊ธฐ
๊ทธ๋์ react query์ ๊ธฐ๋ฅ๋ง์ ์ฌ์ฉํ ๋ฟ, ์ ํํ ํ์ ์ง์ ์์ด ๊ฐ๋ฐํ๋ ๊ฒ์ด ์์ ์ฑ์ ์ทจ์ฝํ๋ค๋ ๊ฒ์ ์๋กญ๊ฒ ์๊ฒ ๋์๋ค.
ํด๋น ํน์ง์ ์น์ฌ์ดํธ์ ์ ์ฉ์์ผ ์บ์ฑ ๋ฟ๋ง ์๋๋ผ ์์ ์ฑ์ ๋์ธ ์ฌ์ดํธ๋ก ๋ง๋ค์ด๊ฐ๋ณด๋ ค๊ณ ํ๋ค.
'WEB > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ก์ /๊ณ์ฐ/๋ฐ์ดํฐ๋ฅผ ํ์ฉํ useMuation ๊ธฐ๋ฅ ๊ฐ์ (3) | 2023.12.07 |
---|---|
React์ ํจํค์ง ๊ตฌ์กฐ์ ์ฉ์ด ์ ๋ฆฌ (0) | 2023.12.03 |
[ ๋ชจ๋ ๋ฆฌ์กํธ : Deep Dive ] - ๋ฆฌ์กํธ ๊ฐ๋ฐ์์ ๋ฐ๋์ ์์์ผํ๋ JS (0) | 2023.11.28 |
[ ๋ชจ๋ ๋ฆฌ์กํธ : Deep Dive ] - ๋ฆฌ์กํธ์ ๋ํด (1) | 2023.11.13 |
PWA + Safari (0) | 2023.07.03 |