Neatly Punctuated Musings

    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.

    Install

    npm i rescript-swr

    DownloadsWeekly Downloads

    24

    Version

    3.0.0-beta.2

    License

    MIT

    Unpacked Size

    18.2 kB

    Total Files

    10

    Last publish

    Collaborators

    • arafatamim