useEffect is an React hook.

When to run

First and foemost: useEffect doesn’t run on the server. Only on the client. This applies to SSR to.

Use can pass an dependency array to useEffect. Then, it will trigger, once the dependencies change.

Run on all changes

useEffect(() => {
  // I depend on everything, I'll run on every re-render
}); 

Run after initial render

useEffect(() => {
 
}, []);

Important: This runs after the initial render, not on or before For running before renders, use useLayoutEffect

Gotchas

Infinite loops

useEffect(() => {
  setCount(count + 1); // rerenders → runs again → infinite loop
}, [count]);

No async callback

The effect itself can’t be run async - instead, use an async function within:

useEffect(() => {
  async function fetchData() {
    const res = await fetch(...);
  }
  fetchData();
}, []);