diff --git a/src/index.tsx b/src/index.tsx index 79e4303..fce858c 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -99,21 +99,30 @@ export const useWorker = ( error: Error | undefined; callback: (...args: TArgs) => Promise; } => { - const [isLoading, setIsLoading] = useState(false); - const [error, setError] = useState(undefined); + const [{ isLoading, error }, setState] = useState({ + isLoading: false, + error: undefined as Error | undefined, + }); + + const setError = useCallback((error: Error | undefined) => { + setState(s => ({ ...s, error })); + }, []); + + const setIsLoading = useCallback((isLoading: boolean) => { + setState(s => ({ ...s, isLoading })); + }, []); + const callback = useCallback(async (...args: TArgs): Promise< TRet | undefined > => { try { setIsLoading(true); const result = await worker(...args); - setIsLoading(false); - setError(undefined); + setState({ isLoading: false, error: undefined }); return result; - } catch (e) { - setIsLoading(false); - setError(e); + } catch (error) { + setState({ isLoading: false, error }); } }, dependencies);