AutorÃa | Ultima modificación | Ver Log |
import { useState, useCallback, useEffect } from "react";
export function useApi(
apiFunction,
args = {
autoFetch: false,
config: undefined,
}
) {
const [data, setData] = useState(null);
const [error, setError] = useState(null);
const [loading, setLoading] = useState(false);
const execute = useCallback(
async (...args) => {
setLoading(true);
setData(null);
setError(null);
try {
const result = await apiFunction(...args);
setData(result);
return result;
} catch (err) {
setError(err);
throw err;
} finally {
setLoading(false);
}
},
[apiFunction]
);
useEffect(() => {
if (args?.autoFetch) {
execute(args.config);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [args, execute]); // Dependencias para autoFetch
return { loading, data, error, execute };
}