1.1.2 • Published 1 year ago

whyfetch v1.1.2

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

README

An browser side httpClient crafted with window.fetch.

Hot use it

  • Install package
yarn add whyfetch
  • How to use it
import HttpClient from "whyfetch";

const baseUri = "Your base uri";
const options = {
  Accept: "application/json, text/plain",
  "Content-Type": "application/json;charset=UTF-8",
};

const httpClient = new HttpClient(baseUri, options);

httpClient.get<User[]>("users");
httpClient.patch<User>("users/user_id", userUpdate);
httpClient.post<User[]>("users", userData);
httpClient.delete<User[]>("users/user_id");
  • Extend HttpClient

  • Add injection before making or after recieivng response

class MyHttpClient extends HttpClient {
   async request (conf) {
   
   // do something before request;

   const result =  await super.request(conf);

   // do something after request;
   
   return result;
}
  • Query Params
class OrderClient extends HttpClient {
  getOrders = (params: Record<string, string>) => {
    return this.get<Order[]>({
      apiPath: 'orders',
      query: {
        sort: 'date',
        order: 'desc'
      }
    })
  }
  
  // Or
  getOrders = (params: Record<string, string>) => {
    return this.get<Order[]>({
      apiPath: 'orders',
      query: {
        params: {
          sort: 'date',
          order: 'desc'
        },
        options: // IStringifyOptions 
      }
    })
  },
}
  • Abort a request
import React, { useState, useEffect } from 'react';

import HttpClient from './HttpClient';

const httpClient = new HttpClient('https://example.com/api');

const apiPath = 'users';
const query = {
  city: 'LA'
}

function MyComponent() {
  const [data, setData] = useState(null);

  useEffect(() => {
    setLoading(true);
    const queryOption = {
      apiPath,
      query
    };

    httpClient
      .get(queryOption)
      .then((response) => setData)
      .catch((error) => {
        if (error.name !== 'AbortError') {
          setError(error.message);
          setLoading(false);
        }
      });

    return () => {
      httpClient.abort({
        ...queryOption,
        method: "GET"
      });
    };
  }, []);

  return (
    <div>
      {data && (
        <ul>
          {data.map((item) => (
            <li key={item.id}>{item.name}</li>
          ))}
        </ul>
      )}
    </div>
  );
}

export default MyComponent;
1.1.2

1 year ago

1.1.1

1 year ago

1.1.0

1 year ago

1.0.10

1 year ago

1.0.9

1 year ago

1.0.8

1 year ago

1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago