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.

Relaterade artiklar