Как обрабатывать серверные ошибки в react? (AXIOS & react-query(tanstack))
Есть ситуация, пользователь регистрируется - отправляет запрос на бэк. Пользователю на почту приходит верификационный код, который нужно ввести на сайте чтобы продолжить регистрацию. И проблема в том, что если пользователь запрашивает код еще раз, выбрасывается ошибка
Unhandled Runtime Error AxiosError: Request failed with status code 400
В тоже время от бэка в response.data.message приходит
"An account with email useremail@email.com already exists."
Я использую react query и у меня создана функция onError чтобы отлавливать ошибки и в идеальном случае так обрабатывать:
onError(error) {
console.log('регистрация ошибка', error);
if(error.data.message.indexOf(already exists)){
return <div>код уже отправлен</div>}
},
Но проблема в том, что AXIOS ловит ошибку раньше и я не нашел как в AXIOS проигнорировать ошибку и передать её в react-query.
index.ts
const api = axios.create({
baseURL: API_URL,
})
authService.ts
import api from '../api/index';
export const register = async (registrationData: IAuthRegisterRequest) => {
const response = await api.post<IAuthRegisterResponse> (AUTH_REGISTER, registrationData)
return response
}
authorization.mutation.ts
import { register } from '@/services/authService';
const authorizationConfig = {
registerConfig: {
key: 'register',
request: async (params: IAuthRegisterRequest) => {
const res = await register(params);
return res.data;
},
},
};
export const useRegistrationMutation = () => {
const { registerConfig: config } = authorizationConfig;
const state = useMutation(config.request, {
useErrorBoundary: true,
onSuccess(data) {
console.log('регистрация начата', data);
},
onError(error) {
console.log('регистрация ошибка', error);
},
});
return state;
};
RegistrationForm.tsx
const { mutateAsync: mutateSignUp, isLoading: isLoadingRegister, isError, error } =
useRegistrationMutation();
if(isError){
return <div>error: {error?.toString()}</div>
}
Вопрос: Как обойти и передать ошибку из AXIOS в react-query? Или может есть какие-то другие подходы?