본문 바로가기
카테캠/2단계

[7/22] React Query - useMutation

by 쪼꼬에몽 2025. 7. 22.

useMutation: 데이터 생성/수정/삭제 요청에 사용

const mutation = useMutation({
	mutationFn: newTodo => axios.post(url, newTodo),
    onSuccess: () => {
    	console.log('등록 성공');
    },
});

// 호출
mutation.mutate({ title: '할 일', done: false });

useMutation({...})

  • useQuery는 서버로부터 데이터를 가져올 때 사용
  • useMutation은 서버에 데이터를 보낼 때 (POST/PUT/DELETE 등) 사용

mutationFn: (newTodo) => axios.post(...)

  • mutationFn은 서버 요청을 수행하는 함수
  • mutate()가 호출될 때 실행됨
  • axios.post가 실행되어 새 할 일을 서버에 등록

onSuccess

  • 요청이 성공했을 때 실행됨
  • invalidateQueries를 사용해 목록을 갱신하거나, 알림을 띄우기도 함

mutaion.mutate(...)

  • 실제로 API 요청을 보내는 트리거
  • 이 함수에 넘긴 데이터가 mutationFn의 인자로 전달됨 
POST /api/todos
Content-Type: application/json

{
	"title": "할 일",
    "done": false
}

흐름

1. mutate({...}) 호출

2. mutationFn 호출 -> axios.post()로 서버 요청 전송

3. 요청 성공 -> onSuccess() 실행 

등록 후 목록 다시 불러오기

const mutation = useMutation({
	mutationFn: newTodo => axios.post(url, newTodo),
    onSuccess: ()=> {
    	queryClient.invalidateQueries(['todos'); // 목록 쿼리 다시 요청 
    }
});

queryClient.invalidateQueries(['todos'])

  • invalidateQueries()는 해당 쿼리를 무효화하여 다시 불러오게 만듦
  • useQuery(['todos'], fetchTodos)와 같은 코드로 관리되고 있는 할 일 목록을 자동으로 리패칭(재요청) 함
  • 등록 후 화면의 목록이 자동으로 최신 상태로 갱신됨

에러 핸들링

const mutation = useMutation({
	mutationFn: newTodo => axios.post(url, newTodo),
    onError: error => {
    	toast.error('등록에 실패');
    }
});

 

 

'카테캠 > 2단계' 카테고리의 다른 글

[7/23] Suspense & ErrorBoundary  (3) 2025.07.23
[7/22] React Query - queryClient  (0) 2025.07.22
[7/22] React Query - useQuery  (0) 2025.07.22
[7/22] React Query  (1) 2025.07.22
[7/22] 무한 스크롤 옵저버  (0) 2025.07.22