React Image onLoad
In React, you can track the state of whether and image has loaded or not by passing the onLoad
prop to an <img />
element.
For my personal website isak.me, I have written the following Header.tsx
component:
const Header = () => {
const [loaded, setLoaded] = useState(false)
const handleOnLoad = () => setLoaded(true)
return (
<header>
{!loaded && <EmptyContributionGraph />}
<img
src="https://ghchart.rshah.org/isaksolheim"
className="contribution-graph"
alt="Github contribution graph"
onLoad={handleOnLoad}
/>
<TextLink url="/" text="isak.me" />
</header>
)
}
I use the useState
hook to add React state and keep track of the loaded
value. Once the <img />
has loaded, the function handleOnLoad
runs, which flips the loaded
state from false
to true
. The temporary image <EmptyContributionGraph />
will not disappear.
This is what the final component looks like: