#Resilience: Retry
For transient issues, e.g. network errors. Can be improved with exponential back-off and jitter (to prevent Thundering Herd Problem).
import { useQuery } from '@tanstack/react-query';
export default function ProductPage({ id }) {
const { data, error } = useQuery({
queryKey: ['product', id],
queryFn: () => fetch(`/api/products/${id}`).then(res => res.json()),
retry: 3,
/**
* Calculates the delay before the next retry attempt using exponential backoff.
*
* @param {number} attempt - The number of the current retry attempt (starting from 0).
* @returns {number} The delay in milliseconds before the next retry, capped at 30,000 ms.
*/
retryDelay: attempt => Math.min(1000 * 2 ** attempt, 30000)
});
if (error) return <ProductErrorState />;
if (!data) return <ProductSkeleton />;
return <ProductDetails product={data} />;
}