본문 바로가기
개발

데이터를 useMutation으로 가져오는 건 괜찮을까?

by 양현정 2024. 6. 11.

일반적으로 React QueryuseMutation서버에 데이터를 전송(POST, PUT, DELETE 등) 하는 작업에 사용합니다.
반대로 데이터를 가져오는 작업(FETCH) useQuery처리하는 것이 표준적인 방식입니다.

하지만 특정 상황에서는 useMutation사용해서 데이터를 가져오는 것이 적절한 경우도 존재합니다.

 

🧩 상황 설명: 버튼 클릭 조건에 따라 API 호출이 필요한 케이스

현재 진행 중인 프로젝트에서는 버튼 클릭 이벤트통해 특정 플래그 값을 기준으로 다음 동작을 결정해야 했습니다.

이러한 경우 useQuery컴포넌트 마운트 시점에 자동 실행되기 때문에,

사용자 액션에 따라 조건부로 실행되는 useMutation적합했습니다.


🛠️ 실제 구현 예시

// React Query Mutation 훅 정의
export const useTicketAvailable = () => {
  return useMutation(async (goodsCode: string) => {
    const result = await getTicketAvailable(goodsCode);
    return result.data;
  });
};
// 사용 예시
const MyComponent = (props) => {
  const ticketMutation = useTicketAvailable();

  const handleEnter = async () => {
    try {
      const data = await ticketMutation.mutateAsync(props.ticketOption.goodsCode);

      if (data.availableFlag) {
        // 입장 가능
      } else {
        // 입장 불가 처리
        notify({
          type: 'success',
          message: '입장이 불가능한 상태입니다.',
        });
      }
    } catch (error) {
      console.error('에러 발생:', error);
    }
  };

  return <button onClick={handleEnter}>입장하기</button>;
};
 

📌 정리

  • useMutation일반적으로 데이터를 "보내는" 작업사용
  • 하지만, 버튼 클릭 데이터 요청 사용자 액션 기반 요청에는 useMutation활용할 있음
  • 방식은 특수한 경우에 한정되며 가능한 useQuery기본으로 사용하되 상황에 따라 유연하게 선택하는 것이 좋음

'개발' 카테고리의 다른 글

🌳 Tree-shaking과 enum 사용에 대한 고민  (0) 2024.06.23
애니메이션 라이브러리  (0) 2024.06.12
useSyncExternalStore  (0) 2024.04.25
사내 어드민 시스템 분석  (0) 2024.04.15
객체를 배열로 변환하는 방법 정리  (0) 2024.04.12