rescript-swr

3.0.0-beta.2 • Public • Published

rescript-swr

npm npm

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.

Dependencies (3)

Dev Dependencies (2)

Package Sidebar

Install

npm i rescript-swr

Weekly Downloads

72

Version

3.0.0-beta.2

License

MIT

Unpacked Size

18.2 kB

Total Files

10

Last publish

Collaborators

  • arafatamim