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를 사용하는 것과 동일한 효과를 얻을 수 있다.
'Frontend > Apollo' 카테고리의 다른 글
useLazyQuery, GraphQL 쿼리를 즉시 실행하지 않고 필요할 때 호출 (0) | 2024.10.15 |
---|---|
GraphQL 서버와 통신하지 않고 Apollo Client 캐시에서 직접 데이터를 읽고 쓰기 (0) | 2024.10.01 |
Apollo Link 개요와 주요 기능 (0) | 2024.09.29 |
Apollo Client 캐시 동작과 관리 방법 (0) | 2024.09.29 |
GraphQL Code Generator, 타입스크립트 정의 자동 생성 (0) | 2024.09.10 |