react-query mutationCache subscribe 사용 예시

less than 1 minute read

react-query에서 특정 mutation을 수행하고, mutation이 완료될 경우 특정 함수를 실행하려면 어떻게 해야할까? react-query는 mutation을 수행할 때마다 mutationCache를 update한다. 따라서 mutationCache의 변경을 subscribe 하고 있다가, 특정 Mutation의 수행이 완료되면 원하는 함수를 실행하면 된다.

예시는 이렇다.

import { useEffect } from 'react';
import { useQueryClient } from 'react-query';

const useCustomHook = () => {
  const queryClient = useQueryClient(); // react-query에서 queryClient를 뽑는다
  const mutationCache = queryClient.getMutationCache(); // mutationCache를 뽑는다.

  useEffect(() => {
    // 구독 콜백을 설정한다
    const unsubscribe = mutationCache.subscribe(event => {
      if (event?.state.status !== 'success') return; // mutation이 성공한 경우에만 처리
      if (원하는 변경사항인지 확인) doWhatYouWant(); // 이제 원하는 일을 한다.
    });

    return unsubscribe; // 컴포넌트가 죽을 때 구독을 끊어준다
  }, []);
};

물론 useMuation의 option에 onSettled 등의 콜백을 등록하면 가장 좋겠으나, 부득이 할 경우 위 방법을 사용하면 편리하다

20220310

Leave a comment