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();
}, []);