React Query가 v5에서 useQuery의 onSuccess, onError, onSettled 콜백을 제거하기로 했는데 그 이유를 메인테이너가 직접 설명한 글입니다. useQuery에서 onSuccess, onError, onSettled 콜백을 제거할 거라고 트위터에 올렸을 때 정말 많은 반대 의견을 들었기 때문에 그 이유를 설명하려고 글을 쓴 것으로 보입니다.
SemVer에서 메이저 버전이 바뀌는 것은 호환되지 않는 변경 사항이 있음을 의미합니다. 글 초반에는 버전에 관해서 얘기하는데 API 설계를 처음부터 아주 잘하면 좋겠지만 그러기가 쉽지 않고 API에서 호환성을 깨뜨리는 변경을 한다는 것은 기존 설계가 실패했다는 의미이고 그런 면에서 이번 변경은 React Query가 API의 5번째 실패를 했다는 의미라고 합니다.
onSuccess, onError, onSettled 콜백은 직관적이고 이해하기 쉽기 때문에 사람들이 많이 좋아하는 기능이었습니다. 하지만 컴포넌트 구조에 따라서 이 콜백이 여러번 호출될 수 있고 사람들은 이 콜백에서 상태 동기화를 많이 하곤 합니다. 이는 설계상 의도한 것은 아니었지만 상태 동기화를 하기에 적절한 위치로 보이기 때문에 많은 사람들이 상태 동기화를 하고 이 경우 문제를 찾기 아주 어렵게 만듭니다.
결국 이 콜백은 개발자들에게 안티 패턴을 유도하게 되었고 결국 버그를 만들 가능성이 오히려 커졌기 때문에 v5에서는 이를 제거할 예정이라고 합니다.
https://tkdodo.eu/blog/breaking-react-querys-api-on-purpose