'How can I stop a react-query useQuery running on a refetchInterval when a condition is met?
I have a requirement to keep fetching data until a condition is met
I can set up the fetch on an interval with the snippet below but I can't figure out how to stop the fetchData when needed. Is this possible?
const { status: answersStatus, data: answers } = useQuery(
                           ['fetchData', { context, activity, stage, country }], 
                           fetchData,
                           {refetchInterval: 2000});
							
						Solution 1:[1]
with a local state:
const [refetchInterval, setRefetchInterval] = React.useState(2000)
const { status: answersStatus, data: answers } = useQuery(
    ['fetchData', { context, activity, stage, country }], 
    fetchData,
    {refetchInterval});
you can set the refetchInterval to false or 0 to turn it off. If you want to do it depending on the response, the onSuccess, onError or onSettled callbacks are likely the best place:
const [refetchInterval, setRefetchInterval] = React.useState(2000)
const { status: answersStatus, data: answers } = useQuery(
    ['fetchData', { context, activity, stage, country }], 
    fetchData,
    {
        refetchInterval,
        onError: () => setRefetchInterval(0)
    });
    					Solution 2:[2]
In the end I leveraged short-circuit evaluation so my call is now
const { data: answers } = useQuery(
    isThereSomethingToGet && [`fetchData`, { ...qmfRouteParams, context: appContext }],
    fetchData,
    {
      refetchIntervalInBackground: true,
      refetchInterval: DocusignPolling.INTERVAL,
    },
  );
When isThereSomethingToGet is falsy the function isn't called.
Solution 3:[3]
For me, it was causing infinite loop until passing function to the refetchInterval like so:
refetchInterval: data => (checkMyResponseHere(data) ? false : 2000)
P.S. react-query v.3.38.0
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source | 
|---|---|
| Solution 1 | TkDodo | 
| Solution 2 | chris loughnane | 
| Solution 3 | ??????? ????????? | 
