Deduplication cooldown

By default, XSWR uses a 1000ms deduplication cooldown.

That means components won't refetch a resource if it was already fetched less than 1000ms ago.

You can use a custom cooldown to override or disable this behaviour (use 0 to disable).

Basically, the fetch is prevented if Date.now() < state.cooldown.

You can ignore the deduplication cooldown by using query.refetch().

Resource cooldown delay

You can set a cooldown delay for all resources in your core provider.

function MyWrapper() {
return <XSWR.CoreProvider
cooldown={5000}>
<MyAwesomeApp />
</XSWR.CoreProvider>
}

Or you can set a cooldown delay for some resource.

function getHelloSchema() {
return getSingleSchema<Hello>("/api/hello", fetchAsJson, { cooldown: 5000 })
}

Response cooldown time

You can also set a cooldown time directly in your fetcher.

async function fetchAsJson<T>(url: string, more: FetcherMore<T>) {
const { signal } = more
const res = await fetch(url, { signal })
const cooldown = Date.now() + 5000
if (!res.ok) {
const error = new Error(await res.text())
return { error, cooldown }
}
const data = await res.json() as T
return { data, cooldown }
}

For more control, cooldown is a time, not a delay (you must add Date.now() if you use a delay).

You can also use response headers like Cache-Control to set the cooldown time accordingly.