README
SWR for Svelte
This is a data management/fetching library written for Svelte, inspired by SWR, and with built in integrations for Suspense. By keeping all requests in cache, views can be rendered instantly while refetching any potentially stale data in the background.
Core Functions
swr
import { swr } from '@svelte-drama/swr'
const key = '/my_url'
const options = {
fetcher: (key) => fetch(key).then((r) => r.json()),
maxAge: undefined,
plugins: [],
updater: undefined,
}
const { data, error, refresh, update } = swr(key, options) // or "swr(key, options.fetcher)"
Arguments
key
:string | undefined
A string value uniquely identifying this resource. Typically this will be the url fetched. This value will be passed to any supplied
fetcher
function.If
key
isundefined
, no data will be fetched andswr
will immediately return.options.fetcher
:async (key) => any
Whenever data is refreshed, this function will be called. It must return a value other than
undefined
to indicate loading was successful.options.maxAge
:number
If data in the cache is older than
maxAge
in milliseconds, a new request to refresh the data will be launched in the background.options.plugins
:SWRPlugin[]
An array of plugins to provide additional behavior. See Plugins.
options.updater
:async (key, value) => any
If
updater
is defined,swr
returns a writable store for data. Any changes to that store will be immediately persisted to cache andupdater
will be called to persist this data.
Returns
data
:Readable | Writable
A Svelte store containing the results returned by
fetcher
. Data is not updated iffetcher
throws an error. A writable store is returned only ifoptions.updater
is defined.error
:Readable<Error | undefined>
A Svelte readable store containing an error if the most recent request to
fetcher
threw an error.data
anderror
may both contain data if a request was successful and a later refresh encountered an error.processing
:Readable<boolean>
A Svelte readable store indicating if is a request is currently in progress. Useful for showing background activity indicators.
refresh
:async () => void
Force a new request to update the cache.
update
:async (callback) => ReturnValue<typeof callback>
Manually update the cache at this key.
callback
will be called with the current value of the cache, which may be undefined if data has not finished loading.This is most useful when performing optimistic updates or when receiving the results of an update from the server.
clear
import { clear } from '@svelte-drama/swr'
clear()
Deletes all items from cache.
clear(key)
Delete a specific key from cache.
update
import { update } from '@svelte-drama/swr'
Update the cache at a specific key. Most useful when preloading data or when data needs to be reloaded from the server.
update(key)
Mark data as stale, triggering any relevant fetcher functions fetch new data.
update(key, new_value)
Set the cached value.
update(key, async (value) => {
return new_value
})
The current value will be passed to the callback, which may be undefined
if data has not been loaded for this key yet.
Plugins
refreshInterval
import { swr } from '@svelte-drama/swr'
import { refreshInterval } from '@svelte-drama/swr/plugin'
const { data, error } = swr(key, {
plugins: [refreshInterval({ interval })],
})
As long as a subscription to data
or error
exists, a request to refresh data will be made every interval
in milliseconds.
refreshOnFocus
import { swr } from '@svelte-drama/swr'
import { refreshOnFocus } from '@svelte-drama/swr/plugin'
const { data, error } = swr(key, {
plugins: [refreshOnFocus()],
})
As long as a subscription to data
or error
exists, a request to refresh data will be made whenver this window gains focus.
refreshOnReconnect
import { swr } from '@svelte-drama/swr'
import { refreshOnFocus } from '@svelte-drama/swr/plugin'
const { data, error } = swr(key, {
plugins: [refreshOnReconnect()],
})
As long as a subscription to data
or error
exists, a request to refresh data will be made whenver the browser reconnects to the internet.
suspend
import { swr } from '@svelte-drama/swr'
import { suspend } from '@svelte-drama/swr/plugin'
const { data, error } = swr(key, {
plugins: [suspend()],
})
Suspend rendering at the nearest <Suspense>
boundary until data
is no longer undefined
. See Suspense for more information.
suspend
must be called during component initialization.