rescript-swr
Low-overhead ReScript bindings to SWR. Supports version >=2.0.0 & <=3.0.0. Compatible with ReScript v10 and onwards.
Includes experimental module SwrEasy
that's designed for a smoother developer experience,
with the tradeoff being a slightly higher runtime cost.
Installation
Run
npm install rescript-swr swr
then update the bs-dependencies
key in your bsconfig.json
file to include "rescript-swr
".
Examples
@react.component
let make = () => {
let config = {
refreshInterval: 10000,
loadingTimeout: 3000,
fallbackData: {cats: 0, dogs: 0, hamsters: 0},
onLoadingSlow: (_, _) => {
Js.log("This is taking too long")
},
onErrorRetry: (_error, _key, _config, revalidate, {?retryCount}) => {
// Retry after 5 seconds.
Js.Global.setTimeout(
() => revalidate(. {?retryCount})->ignore,
5000,
)->ignore
},
use: [
// logger middleware
(useSWRNext, . key, fetcher, config) => {
let extendedFetcher = args => {
Js.log2("SWR Request: ", key)
fetcher(args)
}
useSWRNext(. key, extendedFetcher, config)
},
],
}
let {data, error} = Swr.useSWR_config(
"/api/user1/pets",
fetcher,
config
);
switch (data) {
| Some(data) => render(data)
| None => render_loading()
};
};
Provide global configuration
<Swr.SwrConfigProvider
value={config => {
fallback: Obj.magic({
"/api/user1/pets": {
"dogs": 2,
"cats": 3,
"hamsters": 1,
},
"/api/user2/pets": {
"dogs": 1,
"cats": 2,
"hamsters": 0,
},
})
}}>
<children />
</Swr.SwrConfigProvider>
Obtain global configuration
open Swr
// return all global configurations
let globalConfig = SwrConfiguration.useSWRConfig()
// access configuration property using auto-generated getter
let refreshInterval = globalConfig.refreshInterval
Js.log(refreshInterval)
// broadcast a revalidation message globally to other SWR hooks
globalConfig->SwrConfiguration.mutateKey(#Key("/api/user1/pets"))
// update the local data immediately, but disable the revalidation
globalConfig->SwrConfiguration.mutateWithOpts(#Key("/api/user1/pets"), _ => Js.Promise.resolve({dogs: 2, hamsters: 5, cats: 10})->Some, { revalidate: false })
Documentation
See DOCUMENTATION.md.
Credits
Originally forked from https://github.com/roddyyaga/bs-swr.
License
MIT Licensed. See LICENSE file.