useRef() hook to create a variable, hasRunOnce, to keep track of the execution status of the effect.useEffect() that runs only when the when condition changes.when is true and the effect has not executed before. If both are true, run callback and set hasRunOnce to true.const useEffectOnce = (callback, when) => {
const hasRunOnce = React.useRef(false);
React.useEffect(() => {
if (when && !hasRunOnce.current) {
callback();
hasRunOnce.current = true;
}
}, [when]);
};
const App = () => {
const [clicked, setClicked] = React.useState(false);
useEffectOnce(() => {
console.log('mounted');
}, clicked);
return <button onClick={() => setClicked(true)}>Click me</button>;
};
ReactDOM.render(<App />, document.getElementById('root'));Subscribe to get resources directly to your inbox. You won't receive any spam! ✌️