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! ✌️