Frontend/Apollo

onCompleted 내부에서 Apollo Client의 client.refetchQueries 메서드를 사용하여 쿼리를 수동으로 리패치하기

wam 2024. 12. 19. 00:20

 

onCompleted 함수에서 쿼리를 다시 실행하여 데이터를 리패치하기

// 기존 refetch

const [createDishMutation, { loading }] = useMutation<
  createDish,
  createDishVariables
>(CREATE_DISH_MUTATION, {
  refetchQueries: [
    {
      query: MY_RESTAURANT_QUERY,
      variables: {
        input: {
          id: +restaurantId,
        },
      },
    },
  ],
});
  • refetchQueries는 useMutation의 옵션으로 제공되는 기능이다.
  • onCompleted는 mutation이 성공적으로 실행된 후 호출되는 콜백 함수이다.

 

 

onCompleted 내부에서 Apollo Client의 client.refetchQueries 메서드를 사용하여 쿼리를 수동으로 리패치하기

// 수동패치 :  Apollo Client의 client.refetchQueries 메서드를 사용

const onCompleted = (data: CreateDishMutation) => {
  const {
    createDish: { ok }
  } = data;

  if (ok) {
    setUploading(false); // 업로드 완료 시 로딩 상태 해제

    // 쿼리를 다시 실행하여 데이터를 리패치
    client.refetchQueries({
      include: [MY_RESTAURANT_QUERY] // 리패치할 쿼리 명시
    });

    client.query({
      query: MY_RESTAURANT_QUERY,
      variables: {
        input: {
          id: +restaurantId // 필요한 변수 추가
        }
      }
    });

    history.goBack(); // 성공 시 페이지 이동
  }
};

const [createDishMutation, { loading }] = useMutation<
  CreateDishMutation,
  CreateDishMutationVariables
>(CREATE_DISH_MUTATION, { onCompleted });
  • onCompleted 함수에서 refetchQueries를 직접 호출할 수는 없다.
  • 쿼리를 다시 사용하여 refetchQueries를 사용하는 것과 동일한 효과를 얻을 수 있다.

 

 

 

 

 

댓글수0