--- title: React useEffectOnce hook tags: hooks,effect author: chalarangelo cover: pop-of-green firstSeen: 2021-11-16T05:00:00-04:00 --- Runs a callback at most once when a condition becomes true. - Use the `useRef()` hook to create a variable, `hasRunOnce`, to keep track of the execution status of the effect. - Use the `useEffect()` that runs only when the `when` condition changes. - Check if `when` is `true` and the effect has not executed before. If both are `true`, run `callback` and set `hasRunOnce` to `true`. ```jsx const useEffectOnce = (callback, when) => { const hasRunOnce = React.useRef(false); React.useEffect(() => { if (when && !hasRunOnce.current) { callback(); hasRunOnce.current = true; } }, [when]); }; ``` ```jsx const App = () => { const [clicked, setClicked] = React.useState(false); useEffectOnce(() => { console.log('mounted'); }, clicked); return ; }; ReactDOM.createRoot(document.getElementById('root')).render( ); ```