๐ react-query v5, useMutation์ mutationKey ์ญํ ์ ๋๋์ฒด ๋ญ๊น?
react-query์ ๋ฉ์ด์ ๋ฒ์ ์ด 5๋ก ์ฌ๋ผ๊ฐ๊ณ ์ฌ์ฉ๋ฐฉ๋ฒ์ด ๋ง์ด ๋ฐ๋์ด์ ์ฝ๋๋ฅผ ์์ ํ ์ผ์ด ์์์ต๋๋ค.
๊ทธ์ ๋น์ฐ์ค๋ฝ๊ฒ ๊ณต์๋ฌธ์๋ฅผ ๋ณด๊ณ ๋ฐ๊พธ๋ ์ค, useMutation์ ์์ ํ ๋ mutationKey๋ผ๋ ์์ฑ์ด ๋ณด์์ต๋๋ค.
์ Key๋ผ๋ ๋ง์ ๊ฝํ ๋น์ฐํ ํ์ ์์๋ผ ์๊ฐํ ๋๋จธ์ง ํ๋ํ๋ ์ ์ฑ์ค๋ฝ๊ฒ mutationKey๋ฅผ ์์ฑํด ์ฃผ์์ต๋๋ค.
const mutation = useMutation({ mutationKey: ['mutationKey'], mutationFn: updateData });
๊ทธ๋ฌ๋ค ์ด๋ ์ ๋ ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง ๋ฌด๋ ต ์ด๋ ์๊ฐ ๋ฌธ๋ ๋ค์๊ณผ ๊ฐ์ ์๊ฐ์ด ๋จธ๋ฆฌ๋ฅผ ์ค์ณค์ต๋๋ค.
"useQuery์ queryKey๋ ์๋ฒ ๋ฐ์ดํฐ ์บ์ฑํ ๋ ์ฐ์ธ๋ค์ง๋ง mutationKey ์๋ ๋๋์ฒด ๋ญ์ง"
๐ mutationKey์ ์ญํ
์ผ๋ง ์๋ ์๋ฃ๋ค์ ์ฐพ์๋ณด๋ useMutation์ ์ต์ ์ผ๋ก ๋ฃ๋ mutationKey๋ ํฌ๊ฒ ๋ค์๊ณผ ๊ฐ์ด ์ธ ๊ฐ์ง ์ญํ ์ ํฉ๋๋ค.
๐ setMutationDefaults / mutation ์ค์์ง์คํ
์ฒซ ๋ฒ์งธ๋ก ๋ค์๊ณผ ๊ฐ์ด queryClient์ setMutationDefaults๋ฅผ ์ด์ฉํด key์ ๋ํ ๊ธฐ๋ณธ mutation์ ์ค์ ํ ์ ์์ต๋๋ค.
queryClient.setMutationDefaults(['addUser'], { mutationFn: addUser })
์ด๋ ๊ฒ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ ํ mutation์ ๋ค์๊ณผ ๊ฐ์ด mutationFn ์์ด key๋ก๋ง ํธ์ถ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
const mutation = useMutation({ mutationKey: ['addUser'] });
์ด๋ฌํ ๋ฐฉ์์ ์ฌ์ฉํ๋ค๋ฉด mutation์ ํ ๊ณณ์ ๋ชจ์ ๊ด๋ฆฌํ ์ ์์ผ๋ฉฐ,
mutationKey ๋ํ ํ ๊ณณ์์ ์์๋ก ๊ด๋ฆฌํด ์ฌ์ฉํ๊ธฐ๋ ํธ๋ฆฌํ ๊ฒ์ ๋๋ค.
๐ useMutationState
import { useMutationState } from '@tanstack/react-query'
const data = useMutationState({ filters: { mutationKey: ['error'] }});
const data2 = useMutationState({
filters: {
status: 'error',
mutationKey: ['error']
},
select: ( mutation ) => mutation
});
useMutationState ํ ์ ์ด์ฉํ๋ฉด ํํฐ ์กฐ๊ฑด์ ํด๋นํ๋ MutationCache ์ ๋ณด๋ฅผ ์์งํ ์ ์์ต๋๋ค.
filters ์์ฑ์ ์กฐ๊ฑด์ ๊ฑธ ์ ์๋ ์ต์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- mutationKey?: MutationKey
- exact?: boolean
- status?: "error" | "idle" | "pending" | "success"
- predicate?: (mutation: Mutation) => boolean
์์๋ก ์๋ฒฝํ์ง ์์ง๋ง ์ ๊ฐ ErrorBoundary๋ฅผ ํ ์คํธํ ๋ ์ฌ์ฉํ๋ ์ฝ์์ ์ฐ์ด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์บ์ ๋ mutation data๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
๐ useIsMutation
import { useIsMutating } from '@tanstack/react-query'
// ์ผ๋ง๋ ๋ง์ mutation์ด fetching ๋๋์ง?
const isMutating = useIsMutating()
const isMutatingPosts = useIsMutating({ mutationKey: ['posts'] })
์ด ํ ์ ํด๋นํ๋ mutation์ด ์ผ๋ง๋ fetching ๋๋์ง number ๊ฐ์ผ๋ก return ํด์ฃผ๋ ํจ์์ ๋๋ค.
์ด๊ฑด ๊ฐ๋จํด์ ์ฌ๊ธฐ์ ์ด๋ง ์ค๋ช ์ ๋ง์น๊ฒ ์ต๋๋ค.
๊ทธ๋ผ mutationKey์ ๋ํ ๊ถ๊ธ์ฆ์ด ํด๊ฒฐ์ด ๋๋๋ฐ ๋์์ด ๋๊ธธ ๋ฐ๋๋๋ค!
๋๊ธ