javascript - react-query useMutation onError utlöses aldrig
Jag provar för närvarande react-query i mitt projekt.
Jag har problem med att hantera fel inom min mutation.
I min nätverksflik kan jag bekräfta att servern svarar med kod 400 eller 500, vilket jag antog gör att axios kastar ett fel, och därmed utlöser den definierade onError-funktionen.
Men onSuccess-funktionen kallas alltid oavsett hur API-anropet går.
Vad missar jag här? Tack på förhand.
const { mutate } = useMutation(
['mutation'],
() => axios.patch(API_URL, params),
{
onSuccess: () => {
//this is always fired, even when response code is 400, 500, etc.
void queryClient.invalidateQueries('query');
},
onError: () => {
//should do something but never fired
},
}
);
Svar #1
Se till att returnera resultatet av din mutationsfunktion (d.v.s. axios.patch-anropet behöver returneras)
const { mutate } = useMutation(['mutation'], () => return axios.patch(API_URL, params),
{
onSuccess: () => {
//this is always fired, even when response code is 400, 500, etc.
void queryClient.invalidateQueries('query');
},
onError: () => {
//should do something but never fired
},
})
Svar #2
Tills felet kommer till mutationen kan vissa löften störa det. Exempel:
.catch((error) => {
resolve(error.response) // Must be reject(error.response)
})
Röret catch bör tas bort eller kodas för att avvisa löftet.
Vilken try-catch-block som helst, interceptorer kan hantera felet. I så fall returneras inte felet till mutationen.
