From 78175640fe0805fb2c7358c0eda7d87edcccd2c0 Mon Sep 17 00:00:00 2001 From: "marco.vannozzi" Date: Wed, 17 Nov 2021 12:11:08 +0100 Subject: [PATCH] readme hooks and events section --- README.md | 115 +++++++++++++++++- assets/img/react-http-fetch-logo.png | Bin 0 -> 17931 bytes src/events-manager/index.ts | 2 +- ...use-bus-subscribe.ts => use-http-event.ts} | 8 +- 4 files changed, 118 insertions(+), 7 deletions(-) create mode 100644 assets/img/react-http-fetch-logo.png rename src/events-manager/{use-bus-subscribe.ts => use-http-event.ts} (85%) diff --git a/README.md b/README.md index 6e0fc9c..8b3d4f4 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@

React http fetch

- react-http-fetch logo + react-http-fetch logo
A http library for React JS built on top of JS native fetch.
@@ -44,6 +44,12 @@ Just follow links below to get an overview of library features. - [Example – Abortable request](#example--abortable-request) - [Example – Get request](#example--get-request) - [Request hooks](#request-hooks) + - [Http request hook params](#http-request-hook-params) + - [Http request hook return](#http-request-hook-return) + - [Http request state](#http-request-state) + - [Example – Http request hook triggered automatically on component mount](#example--http-request-hook-triggered-automatically-on-component-mount) + - [Example – Http request hook triggered manually on component mount](#example--http-request-hook-triggered-manually-on-component-mount) + - [Example – Http post request hook](#example--http-post-request-hook) - [Events](#events) - [Caching](#caching) - [Browser support](#browser-support) @@ -65,7 +71,7 @@ yarn add react-http-fetch ``` ## Provider -You can override the default configuration used by the http client to peform any request by using the `HttpClientConfigProvider`: +You can override the default configuration used by the http client to perform any request by using the `HttpClientConfigProvider`: ```js import { defaultHttpReqConfig, HttpClientConfigProvider } from 'react-http-fetch'; @@ -279,10 +285,115 @@ export default App;
## Request hooks +The library provides a hook `useHttpRequest` managing the state of the http request. Such state is returned by the hook along with a function to trigger the request. See [params](#http-request-hook-params) and [return](#http-request-hook-return) for more info. A dedicated hook is provided for every http method: `useHttpGet`, `useHttpPost`, `useHttpPatch`, `useHttpPut`, `useHttpDelete`. + +### Http request hook params +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| baseUrlOverride | string | The base url of the request. If provided, it would override the [provider](#provider) base url. +| relativeUrl | string | The url relative to the base one (e.g. posts/1). +| parser | [HttpResponseParser](src/client/types.ts) | An optional response parser that would override the [provider](#provider) global one. | +| requestOptions | [HttpRequestOptions](./src/client/types.ts) | The options carried by the fetch request. | +| initialData | any | The value that the state assumes initially before the request is send. | +| fetchOnBootstrap | boolean | Tell if the fetch must be triggered automatically when mounting the component or not. In the second case we would like to have a manual fetch, this is optained by a request function returned by the hook. | + +### Http request hook return +Returns an array of two elements, the first one embeds the state of the http request and the second one is a function that can be used to trigger the http request. The table below describes the shape (i.e. properties) of http request state. + +### Http request state +| Property | Type | Description | +| --------- | ---- | ----------- | +| pristine | boolean | Tells if the request has been dispatched. | +| errored | boolean | Tells if the request has returned an error. | +| isLoading | boolean | Tells if the request is pending. | +| error | unknown | property evaluated by the error generated by the backend api. | +| data | any | The response provided by the backend api. | + +### Example – Http request hook triggered automatically on component mount +```js +import { useHttpRequest } from 'react-http-fetch'; + +function App() { + const [state] = useHttpRequest({ + baseUrlOverride: 'https://jsonplaceholder.typicode.com', + relativeUrl: 'todos/1', + requestOptions: {}, + initialData: {}, + fetchOnBootstrap: true, + }); + + return ( +

{`Todo name: ${state && state.data && state.data.title}`}
+ ); +} + +export default App; +``` + +
+ +### Example – Http request hook triggered manually on component mount +```js +import { useHttpRequest } from 'react-http-fetch'; +import { useEffect } from 'react'; + +function App() { + const [state, request] = useHttpRequest({ + baseUrlOverride: 'https://jsonplaceholder.typicode.com', + relativeUrl: 'todos/1', + }); + + useEffect(() => request(), [request]); + + return ( +
{`Todo name: ${state && state.data && state.data.title}`}
+ ); +} + +export default App; +``` + +### Example – Http post request hook
## Events +Every time a request is executed the events shown below will be emitted. Each event carries a specific payload. + +| Event type | Payload type | +| --------- | ---- | +| [RequestStartedEvent](src/events-manager/events/request-started-event.ts) | [HttpRequest](src/client/http-request.ts) | +| [RequestErroredEvent](src/events-manager/events/request-errored-event.ts) | [HttpError](src/errors/http-error.ts) | +| [RequestSuccededEvent](src/events-manager/events/request-succeded-event.ts) |[RequestSuccededEventPayload](src/events-manager/events/request-succeded-event.ts) | + +It's possible to subscribe a specific event using the [useHttpEvent](src/events-manager/use-http-event.ts) hook as shown below: + +```js +import { useState } from 'react'; +import { RequestErroredEvent, RequestStartedEvent, RequestSuccededEvent, useHttpEvent, useHttpRequest } from 'react-http-fetch'; + +function App() { + const [count, setCount] = useState(0); + + const [, request] = useHttpRequest({ + baseUrlOverride: 'https://jsonplaceholder.typicode.com', + relativeUrl: 'todos/1', + }); + + useHttpEvent(RequestStartedEvent, () => setCount(count + 1)); + useHttpEvent(RequestSuccededEvent, () => setCount(count > 0 ? count - 1 : 0)); + useHttpEvent(RequestErroredEvent, () => setCount(count > 0 ? count - 1 : 0)); + + return ( + <> + + {count} + + ); +} + +export default App; +```
diff --git a/assets/img/react-http-fetch-logo.png b/assets/img/react-http-fetch-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..784d720402152483498db12e49861bb21ca38788 GIT binary patch literal 17931 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 - eventName: HttpEventClassType, +export const useHttpEvent = ( + eventType: HttpEventClassType, handler: HttpEventHandler ): void => { // The event bus. @@ -31,14 +31,14 @@ export const useBusSubscribe = ( useCompareLayoutEffect( () => { // Subscribe to the event and keep track of the subscription. - unsubscribeRef.current = eventBus.subscribe(eventName, handler); + unsubscribeRef.current = eventBus.subscribe(eventType, handler); // Clean up: unsubscribe the previous event handler. return () => { unsubscribe(); }; }, - [eventBus, eventName, handler, unsubscribe], + [eventBus, eventType, handler, unsubscribe], fastCompare ); };