typescript - Hur man upprepade gånger skickar en förfrågan till samma API med react-query?


Jag vill använda react-query för att skicka förfrågan och kontrollera ett fält i svaret direkt efter. När jag har hittat det fält jag behöver i svaret, sluta utföra fler åtgärder. Annars fortsätt att köra förfrågan igen tills jag hittar fältet.

const queryResult = useQuery({ queryKey: ['test','testDataId'], queryFn: ({queryKey}) => fetchTestData(queryKey[1]),
});

Svar #1

Det finns också ett annat sätt som du kan prova genom att lägga till retry-parametrar och också hantera fördröjningen genom retryDelay:

ex.

const result = useQuery({
  queryKey,
  queryFn: ({queryKey}) => fetchTestData(queryKey[1]),
  retry: 10, // Will retry failed requests 10 times before displaying an error
})

Du kan också lägga till en funktion i den för att hantera baserat på status

const result = useQuery({
  queryKey,
  queryFn: ({queryKey}) => fetchTestData(queryKey[1]),
  retry: (count, {message: status}) => (status !== '404' && status !== '401')
  // You can add logic based on your requirement and status code.
})

referenslänk:

https://tanstack.com/query/v4/docs/guides/query-retries

React Query fortsätter att försöka trots att 'enabled' är satt till false

Svar #2

Du kan uppnå detta genom att använda invalidateQueries, vilket kommer att markera den aktuella datan som föråldrad och utlösa en hämtning i bakgrunden (så länge du inte skickar refetchType: 'none' till den).

I din onSuccess, lägg till detta (inkapslat i kontrollen för fältet du letar efter):

queryClient.invalidateQueries({ queryKey: [queryKey] });

Relaterade artiklar