Rev 3660 | AutorÃa | Comparar con el anterior | Ultima modificación | Ver Log |
import { useState, useCallback, useEffect } from 'react';
const defaultOptions = {
onSuccess: () => {},
onError: () => {},
autoFetch: false,
autoFetchArgs: []
};
export function useApi(apiFunction, options = defaultOptions) {
const { onSuccess, onError, autoFetch, autoFetchArgs } = {
...defaultOptions,
...options
};
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);
onSuccess(result);
return result;
} catch (err) {
console.error('Error on api: ', err);
setError(err.message);
onError(err);
} finally {
setLoading(false);
}
},
[apiFunction]
);
useEffect(() => {
if (autoFetch) {
execute(...autoFetchArgs);
}
}, [autoFetch, JSON.stringify(autoFetchArgs)]);
return { loading, data, error, execute };
}