If you write:
useEffect(() => {
console.log("Effect runs");
});
and omit the dependency array, React will run this effect after every single render.
✅ 1. Effect runs after every render (initial + re-renders)
That means:
- Runs after the first render
- Runs after every state update
- Runs after every prop change
- Runs after every parent re-render
This can easily cause:
- Performance issues
- Infinite loops
- Repeated API calls
❗ Example: Infinite Loop Scenario
useEffect(() => {
setCount(count + 1);
});
🔥 This triggers:
setCount()→ re-render- Effect runs again → another
setCount() - Loop continues forever ❌
✅ 2. With dependency array omitted → same as writing:
useEffect(() => {
// effect
}, undefined);
React treats it as: ➡️ Run on every render (default behavior)
🔥 Summary of all useEffect variations
1️⃣ No dependency array
useEffect(() => {});
✔ Runs after every render
❌ Can easily cause infinite loops
2️⃣ Empty dependency array
useEffect(() => {}, []);
✔ Runs only once (componentDidMount)
3️⃣ With dependencies
useEffect(() => {}, [state, props]);
✔ Runs only when the values inside the array change
🎯 Short Interview Answer
If you omit the dependency array,
useEffectruns after every render. This includes the initial render and all subsequent re-renders, which can cause performance issues or infinite loops if the effect updates state.