Files
30-seconds-of-code/react/snippets/use-effect-once.md
Angelos Chalaris 462322f885 Prepare for merge
2023-05-01 22:56:37 +03:00

1.1 KiB

title, type, tags, author, cover, dateModified
title type tags author cover dateModified
React useEffectOnce hook snippet
hooks
effect
chalarangelo pop-of-green 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.
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.createRoot(document.getElementById('root')).render(
  <App />
);