Spaces:
Sleeping
Sleeping
File size: 618 Bytes
f927995 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import { useState, useEffect, useCallback } from 'react';
export function useAsync(fn, deps = []) {
const [state, setState] = useState({ data: null, loading: true, error: null });
const run = useCallback(async () => {
setState(s => ({ ...s, loading: true, error: null }));
try {
const data = await fn();
setState({ data, loading: false, error: null });
} catch (e) {
setState({ data: null, loading: false, error: e.message });
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, deps);
useEffect(() => { run(); }, [run]);
return { ...state, refetch: run };
}
|