Hyper Fetch
Backend agnostic data-exchange framework for any javascript environment. Ta...
README
⚡
Hyper Fetch
Hyper Fetch is a data-exchange framework. What makes it unique is the typesafe design and the ease of use.
This library is backend and framework agnostic, with aim to provide as many great and useful features as possible. In
particular caching, queuing, persistence, offline first support, request deduplication, authentication,
progress tracking, structure and architecture guidelines.
Key Features
🔮 Simple setup - Read more
🎯 Request cancellation - Read more
✨ Window Focus/Blur Events - Read more
🚀 Queueing - Read more
💎 Automatic caching - Read more
🪄 Persistence - Read more
🎊 SSR Support - Read more
🔋 Offline First - Read more
📡 Built-in client - Read more
🧪 Easy to test - Read more
🎟 Authentication - Read more
💡 Prefetching - Read more
Sources
- #### Quick Start
- #### Docs
- #### API
- #### Guides
Installation
The easiest way to get the latest version of Hyper Fetch is to install it via yarn or npm.
- ``` sh
- npm install --save @hyper-fetch/core
- or
- yarn add @hyper-fetch/core
- ```
React Hooks
- ``` sh
- npm install --save @hyper-fetch/core @hyper-fetch/react
- or
- yarn add @hyper-fetch/core @hyper-fetch/react
- ```
Packages
Package | Stats |
---|---|
⚡ Hyper Fetch | |
⚛️ React Hyper Fetch |
Examples
Simple Setup
- ```tsx
- import { Builder } from "@hyper-fetch/core";
- // Create global setup
- export const builder = new Builder({ baseUrl: "http://localhost:3000" });
- // Create reusable commands to trigger requests
- export const postData = builder.createCommand<ResponseType, RequestType, LocalErrorType, QueryParamsType>()({
- method: "POST",
- endpoint: "/data/:accountId",
- });
- export const getData = builder.createCommand<ResponseType, RequestType, LocalErrorType, QueryParamsType>()({
- method: "GET",
- endpoint: "/user",
- });
- ```
Triggering request
- ```tsx
- // Set the information to command (methods return command clone - NOT mutating the source)
- const command = postData
- .setParams({ accountId: 104 }) // Set Params
- .setQueryParams({ paramOne: "test", paramTwo: "test2" })
- .setData({ name: "My new entity", description: "Some description" }); // Add payload data
- // Use command directly
- const [data, error, status] = await command.send();
- // OR pass dynamic data directly to '.send' method
- const [data, error, status] = await command.send({
- params: { accountId: 104 },
- data: { name: "My new entity", description: "Some description" },
- queryParams: { paramOne: "test", paramTwo: "test2" },
- });
- ```
React
Use prepared hooks
Fetch with lifecycle
- ```tsx
- import { useFetch } from "@hyper-fetch/react";
- // Lifecycle fetching
- const { data, error, loading, onSuccess, onError } = useFetch(getData);
- onSuccess((data) => {
- console.log(data);
- });
- onError((error) => {
- console.log(error);
- });
- ```
Manually trigger requests
- ```tsx
- import { useSubmit } from "@hyper-fetch/react";
- const { submit, data, error, submitting, onSubmitSuccess, onSubmitError } = useSubmit(command);
- onSuccess((data) => {
- console.log(data);
- });
- onError((error) => {
- console.log(error);
- });
- return <button onClick={() => submit()}>Trigger request!</button>;
- ```
Pass dynamic data to submit method
- ```tsx
- import { useSubmit } from "@hyper-fetch/react";
- const { submit, data, error, submitting, onSubmitSuccess, onSubmitError } = useSubmit(command);
- onSuccess((data) => {
- console.log(data);
- });
- onError((error) => {
- console.log(error);
- });
- return (
- <button
- onClick={() =>
- submit({
- params: { accountId: 104 },
- data: { name: "My new entity", description: "Some description" },
- queryParams: { paramOne: "test", paramTwo: "test2" },
- })
- }
- >
- Trigger request!
- </button>
- );
- ```
Use submit promise response
- ```tsx
- import { useSubmit } from "@hyper-fetch/react";
- // Manual triggering
- const { submit, data, error, submitting, onSubmitSuccess, onSubmitError } = useSubmit(command);
- onSuccess((data) => {
- console.log(data);
- });
- onError((error) => {
- console.log(error);
- });
- const handleSubmit = (values: ValuesType, { setSubmitting }: FormikHelpers) => {
- const [data, error, status] = await submit(); // Submit method returns data!
- setSubmitting(false);
- if (data) {
- notification.success("Done!", data);
- } else {
- notification.success("Error!", error);
- }
- };
- return <Form onSubmit={handleSubmit}>...</Form>;
- ```