const useApiCall = (asyncFunction, body) => {
const [fetching, setFetching] = useState(false);
const [response, setResponse] = useState(null);
const [error, setError] = useState(null);
const [cancel, setCancel] = useState(null);
const [fetched, setFetched] = useState(false);
const execute = useCallback(async cancelPromise => {
try {
setFetching(true);
setResponse(null);
setError(null);
setFetched(false);
setCancel(() => {
return cancelPromise.cancel;
});
let result = await cancelPromise.promise;
setResponse(result);
} catch (ex) {
setError(ex);
} finally {
setFetching(false);
setFetched(true);
}
}, []);
useEffect(() => {
const cancelPromise = body
? makeCancelable(asyncFunction(body))
: makeCancelable(asyncFunction());
execute(cancelPromise);
return () => cancelPromise.cancel();
}, [asyncFunction, body, execute]);
return { fetching, response, error, fetched, cancel };
};
Поскольку этот хук возвращает 4 состояния вызова API, я бы хотел использовать этот хук внутри другого хука, но условно. должен ли я создать еще один параметр, который будет вызывать API условно? например, примите другой параметр, скажем, shouldCall api (bool), и добавьте условие над методом выполнения, упомянутым в useEffect?