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 };}