Boa tarde, tudo bem?
Sabendo-se dos princípios do SOLID, em relação ao hook customizado useFecth e suas dependências. Seria uma boa prática tornar o useFecth passível de implementar demais métodos REST?, tais como POST, PUT e DELETE ao invés de somente o GET ?
Sendo assim, na interface de contrato deveria ser definido os demais métodos ( post, put e delete )
export interface IHttp {
get<T>(url: string): Promise<T>;
}
No arquivo Http também deveria ser implementado os demais métodos
import axios from "axios";
import { IHttp } from "./http.interface";
const Http = (): IHttp => {
return {
get: async <T>(url: string): Promise<T> => {
return axios.get(url).then((response) => response.data);
},
};
};
export default Http;
E no arquivo useFetch, também deveria ser modificado para adicionar demais métodos para ser escolhidos no contexto desejado, ou seja, podendo fazer POST, GET, PUT e DELETE
import { useEffect, useState } from "react";
import Http from "../../lib/httpClient";
import { IHttp } from "../../lib/httpClient/http.interface";
type FetchResult<T> = {
data: T | null;
isLoading: boolean;
error: string | null;
};
const useFetch = <T>(url: string): FetchResult<T> => {
const [data, setData] = useState<T | null>(null);
const [isLoading, setIsLoading] = useState<boolean>(false);
const [error, setError] = useState<string | null>(null);
const http: IHttp = Http();
useEffect(() => {
setIsLoading(true);
http
.get<T>(url)
.then((response) => {
setData(response);
setIsLoading(false);
})
.catch((error) => {
setError("Erro ao carregar dados!");
setIsLoading(false);
});
}, [url]);
return { data, isLoading, error };
};
export default useFetch;
Como seria aplicar isso? Ainda seria uma prática que estaria dentro dos requisitos do SOLID, ou seria infringido?
Obrigado.
Felipe D.R