create-fetcher is a remote data fetching library, providing common features - configurable caching, retry, polling with both promised-based API and react hooks.
npm i --save create-fetcher
create-fetcher is built around the standard fetch(), the goal of this library is not trying to replace fetch(), but to provide common utilities around the remote data fetching:
- configurable caching strategies: cache mode and
maxAge,minFresh - configurable cache stores: memory cache, local storage cache, async storage cache(react-native) or any custom cache stores that implement the
Cacheinterface - retry on failure
- polling (can be used together with retry on failure)
- request concurrency control: if a fetch request was triggered before another same request(share the same cacheKey) finished, they will be merged together, once 1 actual fetch request.
- built-in React hooks integration support:
useSWR(),usePolling(),usePaginationList()
fetcher: object instance that responsible for making fetch calls, the reason it is need to be a object is for concurrency control
// quick start
import { useSWR } from 'create-fetcher/lib/hooks';
function MyComponent1() {
// send request by useSWR
const { data } = useSWR('https://jsonplaceholder.typicode.com/todos/1');
return (<div>{JSON.stringify(data)}</div>);
}
// create the fetcher instance to gain more control on cache and fetcher options
import { createFetcher } from 'create-fetcher';
import { useSWR } from 'create-fetcher/lib/hooks';
// create the fetcher instance, pass signal to fetch so it supports fully abort() the request
// otherwise calling abort() on `fetcher.fetch()` returns only aborts at application side (ignores request result).
const userInfoFetcher = createFetcher((id, { signal }) => fetch(`/api/v1/users/${id}`, { signal }), { cacheMaxAge: 7200 });
function MyComponent2() {
// send request by useSWR with 1 as the id, and get the fetch result
const { data } = useSWR(userInfoFetcher, 1);
return (<div>{JSON.stringify(data)}</div>);
}
Please check out example project(react) for a usage demo.
createFetcher(url, options): create a fetcher instancecreateFetcher(requestCreator, options): create a fetcher instance
useSWR(url, request, options),useSWR(fetcher, request, options): basic request hook that supports caching, retry on failureusePolling(url, pollingWaitTime, request, options),usePolling(fetcher, pollingWaitTime, request, options): polling request hookusePaginationList(fetcher, dataHandler, initialRequest, options): for making pagination list request calls and merges the results into a single listuseDeepEqualMemo(value),useShallowEqualMemo(value): for keep using previous value instance if new value equals with previous value
createMemoryCache(): in-memory cachecreateLocalStorageCache(keyPrefix, useMemoryCache): use localStorage as cache storecreateAsyncStorageCache(keyPrefix, useMemoryCache): for react-native, use AsyncStorage as cache store
forEachResponse(requestReturn, handler): callback for each request response, including response retrived from cachegetFinalResponse(requestReturn): get the final responsegetInitialResponse(requestReturn): get thee first valid response, including response retrived from cachefallbackToPureFetch(fetcher): turn fetcher into a pure fetch functionclearCache(cache, maxAge): clear expired items from cache