"use client" import { type SWRResponse, type SWRConfiguration } from "swr" import useSWR from "swr" // https://github.com/vercel/swr/discussions/2330#discussioncomment-4460054 export function useCancelableSWR( key: string, opts?: SWRConfiguration, ): [SWRResponse, AbortController] { const controller = new AbortController() return [ useSWR( key, (url: string) => fetch(url, { signal: controller.signal }).then((res) => res.json()), { // revalidateOnFocus: false, errorRetryCount: 3, refreshInterval: 1000 * 60, // dedupingInterval: 30000, // focusThrottleInterval: 60000, ...opts, }, ), controller, ] // to use it: // const [{ data }, controller] = useCancelableSWR('/api') // ... // controller.abort() }