React Query v5 đổi cách xử lý lỗi so với v4: onError toàn cục trong defaultOptions đã bị gỡ, thay bằng throwOnError hoặc meta.
ts
const queryClient = new QueryClient({
queryCache: new QueryCache({
onError: (error, query) => {
if (query.meta?.showErrorToast) toast.error(error.message)
},
}),
})
// opt-in ở từng query
useQuery({ queryKey: ['todos'], queryFn: fetchTodos, meta: { showErrorToast: true } })retry: (failureCount, error) => error.status !== 401 && failureCount < 3để không retry lỗi auth.throwOnError: trueđẩy lỗi lên Error Boundary thay vì trảisError;useSuspenseQuerythrow sẵn.- Với
fetch, HTTP error không tự throw — phải tự viếtif (!res.ok) throw new Error(res.statusText)trongqueryFn.
Lưu ý: onError ở useMutation vẫn dùng được, chỉ bản toàn cục trong defaultOptions mới bị xoá.