React useEffect runs on reference changes, not logic changes

Why This useEffect Runs More Than You Expect ⚛️ Ever written this and thought React was misbehaving? useEffect(() => { fetchData(); }, [fetchData]); The effect runs again… and again… 😵💫 React isn’t buggy. It’s being very precise. What React actually sees 👇 React reads this as: “Run this effect after every render where the reference of fetchData changes.” Not when the logic changes. Not when the output changes. Only when the reference changes. Here’s the hidden gotcha 🧠 In JavaScript, functions are objects. So if fetchData is defined inside your component: const fetchData = () => { // API call }; A new function is created on every render. From React’s perspective: prevFetchData !== nextFetchData // true ➡️ Dependency changed ➡️ Effect runs again Even if the function looks identical. This isn’t a React quirk ❌ It’s a design choice. React avoids deep comparisons to stay: Fast Predictable Consistent Guessing here would cause far worse bugs. 💡 The takeaway If useEffect feels “random”, it usually isn’t. Your dependencies are changing, even when your values aren’t. Once you think in references instead of values, useEffect finally makes sense. 💬 Question for you: Which dependency caused your most confusing useEffect bug? #ReactJS #JavaScript #WebDevelopment #FrontendDevelopment #CodingBlockHisar #MERN #Hisar

  • text

To view or add a comment, sign in

Explore content categories