
Optimistic updates는 서버가 제대로 동작할 것을 낙관적으로 기대하며, 서버로부터의 응답을 기다리지 않고 사용자에게 바로 피드백을 주는 방식을 말한다. useMutation의 onMutate, onError, onSettled 옵션을 활용해 Optimistic updates를 구현할 수 있다.
const updateUserMutation = useMutation({
mutationFn: async (updatedUser) => {
await updateUser(updatedUser);
},
onMutate: async (updatedUser) => {
// 1
await queryClient.cancelQueries(['user', updatedUser.id]);
// 2
const previousUserData = queryClient.getQueryData(['user', updatedUser.id]);
// 3
queryClient.setQueryData(['user', updatedUser.id], updatedUser);
// 4
return { previousUserData };
},
onError: (err, updatedUser, context) => {
queryClient.setQueryData(['user', updatedUser.id], context.previousUserData);
},
onSettled: (updatedUser) => {
queryClient.invalidateQueries(['user', updatedUser.id]);
},
});
onMutate는 뮤테이션 함수가 실행되기 바로 전에 실행된다.
cancelQueries()를 실행하여, 사용자 관련 데이터를 받아오지 않도록 쿼리를 취소해 준다.onError 의 세 번째 파라미터 context에는 onMutate에서 반환한 값이 들어있다.
context로 받아 온다.context 값으로 쿼리 데이터를 변경해 준다.invalidate해 준다.위와 같은 방식으로 React Query를 활용하여 Optimistic updates를 효과적으로 구현할 수 있다. 이를 통해 사용자 경험을 향상시키고, 서버 응답 대기 시간에 대한 문제를 최소화할 수 있다.