Package Exports
- react-fetch-hook
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (react-fetch-hook) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
react-fetch-hook
React hook for conveniently use Fetch API.
import React from "react";
import { useFetch } from "react-fetch-hook";
const Component = () => {
const { isLoading, data } = useFetch("https://swapi.co/api/people/1");
return isLoading ? (
<div>Loading...</div>
) : (
<UserProfile {...data} />
);
};
useFetch accepts the same arguments as fetch function.
Installation
Install it with yarn:
yarn add react-fetch-hookOr with npm:
npm i react-fetch-hook --saveAPI
useFetch
Create a hook wrapper for fetch call.
useFetch(
path: RequestInfo,
options?: {
...RequestOptions,
formatter?: Response => Promise
depends?: Array<boolean>
},
specialOptions?: {
depends?: Array<boolean>
}
): TUseFetchResultwhere TUseFetchResult is:
{
data: any,
isLoading: boolean,
error: any
}Options:
RequestInfo, RequestOptions
RequestInfo, RequestOptions is fetch args.
formatter
formatter - optional formatter function.
Default is response => response.json() formatter.
Example:
const { isLoading, data } = useFetch("https://swapi.co/api/people/1", {
formatter: (response) => response.text()
});
depends
The request will not be called until all elements of depends array be truthy. Example:
const {authToken} = useContext(authTokenContext);
const [someState, setSomeState] = useState(false);
const { isLoading, data } = useFetch("https://swapi.co/api/people/1", {
depends: [!!authToken, someState] //don't call request, if haven't authToken and someState: false
});
If any element of depends changed, request will be re-call. For example, you can use react-use-trigger for re-call the request:
import {createTrigger, useTrigger} from "react-use-trigger";
const requestTrigger = createTrigger();
export const Subscriber = () => {
const requestTriggerValue = useTrigger(requestTrigger);
const { isLoading, data } = useFetch("https://swapi.co/api/people/1", {
depends: [requestTriggerValue]
});
return <div />;
}
export const Sender = () => {
return <button onClick={() => {
requestTrigger() // re-call request
}}>Send</button>
}
useFetch
usePromise<T, I: $ReadOnlyArray<mixed>>(
callFunction: ?(...args: I) => Promise<T>,
...inputs: I
): TUsePromiseResult<T>where TUsePromiseResult<T> is
type TUsePromiseResult<T> = {
data: ?T,
isLoading: boolean,
error: mixed
}usePaginatedRequest
Create a paginated request.
usePaginatedRequest = <T>(
request: (params: { limit: number, offset: number }) => Promise<Array<T>>,
limit: number
): {
data: Array<T>,
loadMore?: () => mixed,
hasMore: boolean
};