기존_앨범추가 코드
export const usePostAlbumMutation = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: postAlbum,
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: QUERY_KEY.ALBUM });
},
onError: (error) => {
console.error('MutationError:', error);
}
});
};
낙관적업데이트로 변경
export const usePostAlbumMutation = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: postAlbum,
onMutate: async (newData) => {
await queryClient.cancelQueries({ queryKey: QUERY_KEY.ALBUM });
const previousAlbums = queryClient.getQueryData(QUERY_KEY.ALBUM);
queryClient.setQueryData(QUERY_KEY.ALBUM, (old: any) => [...old, newData]);
return { previousAlbums };
},
onError: (error, newAlbum, context) => {
queryClient.setQueryData(QUERY_KEY.ALBUM, context?.previousAlbums);
console.error('MutationError:', error);
},
onSuccess: () => {
console.log('앨범이 성공적으로 추가되었습니다.');
},
onSettled: () => {
queryClient.invalidateQueries({ queryKey: QUERY_KEY.ALBUM });
}
});
};
기존_앨범삭제 코드
export const useDeleteAlbumMutation = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: deleteAlbum,
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: QUERY_KEY.ALBUM });
},
onError: (error) => {
console.error('삭제 중 오류 발생:', error);
}
});
};
낙관적업데이트로 변경
export const useDeleteAlbumMutation = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: deleteAlbum,
onMutate: async (albumId) => {
await queryClient.cancelQueries({ queryKey: QUERY_KEY.ALBUM });
const previousAlbums = queryClient.getQueryData(QUERY_KEY.ALBUM);
queryClient.setQueryData(QUERY_KEY.ALBUM, (old: any) => old.filter((photo: any) => photo.id !== albumId));
return { previousAlbums };
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: QUERY_KEY.ALBUM });
},
onError: (error, albumId, context) => {
queryClient.setQueryData(QUERY_KEY.ALBUM, context?.previousAlbums);
console.error('삭제 중 오류 발생:', error);
},
onSettled: () => {
queryClient.invalidateQueries({ queryKey: QUERY_KEY.ALBUM });
}
});
};