@open-tender/utils
Version:
A library of utils for use with Open Tender applications that utilize our cloud-based Order API.
30 lines (29 loc) • 1.03 kB
JavaScript
import { useState, useEffect } from 'react';
// https://typesafe.blog/article/fetch-images-with-a-react-hook
export const useImage = (src) => {
const [hasLoaded, setHasLoaded] = useState(false);
const [hasError, setHasError] = useState(false);
const [hasStartedInitialFetch, setHasStartedInitialFetch] = useState(false);
useEffect(() => {
setHasStartedInitialFetch(true);
setHasLoaded(false);
setHasError(false);
const image = new Image();
if (src)
image.src = src;
const handleError = () => {
setHasError(true);
};
const handleLoad = () => {
setHasLoaded(true);
setHasError(false);
};
image.onerror = handleError;
image.onload = handleLoad;
return () => {
image.removeEventListener('error', handleError);
image.removeEventListener('load', handleLoad);
};
}, [src]);
return { hasLoaded, hasError, hasStartedInitialFetch };
};