Blog>
Snippets

Configuring Retry Attempts with Delays

Show how to configure React Query to retry a failed query three times with a custom delay function that increases the delay time exponentially after each retry attempt.
import { QueryClient, QueryClientProvider } from 'react-query';

// Function to calculate an exponential backoff delay
const exponentialDelay = (retryAttempt = 0) => {
  // Base delay time
  const baseDelay = 1000;
  // Exponential growth factor
  return Math.min(30000, baseDelay * 2 ** retryAttempt);
};

// Creating a new QueryClient instance
const queryClient = new QueryClient({
  defaultOptions: { 
    queries: {
      // Customizing retries
      retry: 3, // Number of retry attempts
      retryDelay: exponentialDelay, // Custom retry delay function
    },
  },
});
This code snippet creates a new QueryClient instance for React Query with custom configuration for retry attempts. It specifies that a failed query should be retried up to 3 times. The delay between each retry attempt is calculated using the exponentialDelay function, which implements an exponential backoff strategy, with the delay time doubling after each retry attempt, capped at a maximum of 30 seconds.
function App() {
  return (
    <QueryClientProvider client={queryClient}>
      {/* Child components that use React Query hooks */}
    </QueryClientProvider>
  );
}
This code snippet integrates the QueryClient instance into your React application by using the QueryClientProvider component. Any child components inside the QueryClientProvider can now use React Query hooks that automatically adhere to the retry configuration defined in the queryClient instance. This includes retrying failed queries up to three times with an exponentially increasing delay.