Make React useEffect hook not run on initial render Make React useEffect hook not run on initial render reactjs reactjs

Make React useEffect hook not run on initial render


We can use the useRef hook to store any mutable value we like, so we could use that to keep track of if it's the first time the useEffect function is being run.

If we want the effect to run in the same phase that componentDidUpdate does, we can use useLayoutEffect instead.

Example

const { useState, useRef, useLayoutEffect } = React;function ComponentDidUpdateFunction() {  const [count, setCount] = useState(0);  const firstUpdate = useRef(true);  useLayoutEffect(() => {    if (firstUpdate.current) {      firstUpdate.current = false;      return;    }    console.log("componentDidUpdateFunction");  });  return (    <div>      <p>componentDidUpdateFunction: {count} times</p>      <button        onClick={() => {          setCount(count + 1);        }}      >        Click Me      </button>    </div>  );}ReactDOM.render(  <ComponentDidUpdateFunction />,  document.getElementById("app"));
<script src="https://unpkg.com/react@16.7.0-alpha.0/umd/react.development.js"></script><script src="https://unpkg.com/react-dom@16.7.0-alpha.0/umd/react-dom.development.js"></script><div id="app"></div>