변환객체에 변이 속성을 실행하여 변이의 호출을 조절할 수 있고 useQuery
에서 진행한 것과 유사한 방식으로 주기를 처리할 수 있다.
Mutation
은 서버에 데이터를 업데이트 하도록 서버에 네트워크 호출을 실시한다. CRUD에서 useQuery
가 C를 맡았다면, useMutation
는 RUD를 담당한다. Mutation
은 변경내용을 사용자에게 보여주거나 진행된 변경 내용을 등록하여 사용자가 볼 수 있게 하는 방법들이 있다.
Mutation
호출을 하면 서버에서 받는 데이터를 취하고 업데이트된 해당 데이터로 react query
캐시를 업데이트하는 것invalidation
)할 수 있다.useQuery
와 상당히 유사하다. mutate
함수를 반환받는데 이 함수는 우리가 변경 사항을 토대로 서버를 호출할 때 사용할 것이다. 데이터를 저장하지 않으므로 쿼리지는 필요하지 않는다. 이로써 변이에 관련된 캐시는 존재하지 않기때문에 isLoading은 존재하고 isFetching은 없다
useMutation
는 인자로 쿼리지를 받지않고 mutationFn
를 받는다. mutationFn
에서는 useQuery훅의 QueryFn과 다르게 인자를 제공할 수 있다. import { useQuery, useMutation } from "react-query";
const deleteMutation = useMutation((postId) => deletePost(postId));
return(
<>
<button onClick={() => deleteMutation.mutate(post.id)}>Delete</button>
{deleteMutation.isError && <p style={{ color: "red" }}>Error deleting the post</p>}
{deleteMutation.isLoading && <p style={{ color: "purple" }}>Deleting the post</p>}
{deleteMutation.isSuccess && <p style={{ color: "green" }}>Post has (not) been deleted</p>}
</>
)
게시판에서 포스트를 삭제하는 로직을 useMutation을 통해 짜보았다. Delete버튼을 누르면 삭제 상태에따라 다른 색의 글자가 출력된다. 결과를 봐보자.