Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- ios
- objective-c
- Vue.js
- UNKNOWN
- 리액트
- 뷰
- react
- 프론트엔드
- 스위프트
- JavaScript
- 백엔드
- Vue
- 개발
- any
- vuejs
- hooks
- 코딩
- 웹개발
- TypeScript
- c언어
- const
- SWIFT
- 상수
- 오블완
- frontend
- 자바스크립트
- 제네릭
- 티스토리챌린지
- 타입
- 타입스크립트
Archives
- Today
- Total
프론트엔드 괴발개발 블로그
[React-Query] DB 데이터 삭제 후 성공 여부 확인하는 방법은? 본문
Q. React-Query 사용 시 DB 데이터를 delete 했을 때 성공, 실패 여부를 어떻게 확인할 수 있는가?
1) onMutate과 onSuccess에서 invalidate 사용하여 파악 가능
const useDeleteItem = () =>
useMutation({
mutationFn: deleteItem,
onSuccess: (_data, id) => {
// 목록, 상세 등 관련 캐시 무효화
queryClient.invalidateQueries({ queryKey: ['items'] });
queryClient.invalidateQueries({ queryKey: ['item', id] });
},
});
2) onMutate + Optimistic update로 즉시 반영
- UI에 즉시 반영 후 성공 시 목록에서 삭제하고, 실패 시 롤백하는 방법으로 유저 입장에서 체감 속도가 올라감
const useDeleteItem = () =>
useMutation({
mutationFn: deleteItem,
onMutate: async (id: string) => {
await queryClient.cancelQueries({ queryKey: ['items'] });
const prev = queryClient.getQueryData<Item[]> (['items']);
// 즉시 목록에서 제거
queryClient.setQueryData<Item[]>(['items'], old =>
(old ?? []).filter(item => item.id !== id)
);
return { prev };
},
onError: (_err, _id, ctx) => {
// 실패 시 롤백
if (ctx?.prev) queryClient.setQueryData(['items'], ctx.prev);
},
onSettled: (_data, _err, id) => {
// 최종적으로 서버와 동기화
queryClient.invalidateQueries({ queryKey: ['items'] });
queryClient.invalidateQueries({ queryKey: ['item', id] });
},
});
사용 후 캐시 삭제
queryClient.removeQueries({ queryKey: ['item', id] });
결론
상황에 따라 적용할 수 있는 방법은 많지만 onMutate와 onSettled를 사용한 Optimistic Update로 유저에게 빠른 UI 변화를 보여주는 것이 좋아보인다.
'개발 면접' 카테고리의 다른 글
| [개발면접] AI에 대처하는 나의 자세/진로 (1) | 2025.09.09 |
|---|