1️⃣ What is useEffect?
Side effects include:
-
API calls (fetch data)
-
Subscriptions
-
Timers
-
DOM manipulation
-
Logging
-
Cleanup tasks
👉 It replaces lifecycle methods:
-
componentDidMount
-
componentDidUpdate
-
componentWillUnmount
2️⃣ Basic Syntax
3️⃣ When Does useEffect Run?
This depends on the dependency array.
4️⃣ Case 1: Run on Every Render (❌ Rarely Used)
📌 Runs:
-
On first render
-
On every re-render
⚠️ Avoid unless needed.
5️⃣ Case 2: Run Once (Component Did Mount) ✅ MOST COMMON
📌 Runs:
-
Only once when component loads
✔ Ideal for API calls
6️⃣ Case 3: Run When State/Prop Changes
📌 Runs:
-
On mount
-
Whenever
email changes
7️⃣ Multiple Dependencies
Runs if any dependency changes.
8️⃣ Real Example: Fetch Data from API
✔ Fetch once
✔ Set state
✔ Re-render UI
9️⃣ useEffect with Cleanup (IMPORTANT)
Used for:
-
Timers
-
Event listeners
-
Subscriptions
📌 Cleanup runs when:
- Component unmounts
-
Dependency changes
10️⃣ Example: Form Validation with useEffect
✔ Reacts to input changes
✔ No manual triggers needed
11️⃣ Common Mistake ❌ Infinite Loop
🚨 Causes infinite re-renders.
✅ Fix
12️⃣ Using Async/Await Correctly
❌ Wrong
✅ Correct
13️⃣ Real CRUD Example (Your Case)
14️⃣ When NOT to Use useEffect
❌ Deriving state
❌ Handling simple events
❌ Direct calculations
15️⃣ Best Practices
✔ Keep effects focused
✔ One responsibility per effect
✔ Clean up side effects
✔ Correct dependency array
16️⃣ Mental Model (Remember This)
useEffect = React watches values → runs effect when they change
17️⃣ Comparison with Lifecycle Methods
| Class Component | useEffect |
|---|---|
| componentDidMount | useEffect(() => {}, []) |
| componentDidUpdate | useEffect(() => {}, [deps]) |
| componentWillUnmount | Cleanup function |
🎯 Summary
| Concept | Rule |
|---|---|
| Side effects | useEffect |
| Dependency array | Controls execution |
| Cleanup | Prevent memory leaks |
| Async | Use inner function |
| Infinite loop | Watch dependencies |
1️⃣ useEffect Dependency Rules (VERY IMPORTANT)
Basic Rule
Every value used inside
useEffectthat can change must be listed in the dependency array.
🔹 Rule 1: Empty Dependency []
✔ Runs once
✔ Equivalent to
Use when:
-
API call on page load
-
Initial setup
🔹 Rule 2: Specific Dependencies
✔ Runs when
✔ React watches
🔹 Rule 3: Multiple Dependencies
✔ Runs when any dependency changes
🔹 Rule 4: NO Dependency Array (Avoid)
❌ Runs on every render
❌ Performance issues
🔹 Rule 5: Functions as Dependencies
❌ Problem:
✔ Fix with
🔹 Rule 6: Objects & Arrays
Objects change reference on every render.
❌ Bad:
✔ Good:
🔹 Golden Rule (Interview Line ⭐)
If it’s used inside
useEffectand can change, it belongs in the dependency array.
2️⃣ Real useEffect Interview Questions (with Answers)
Q1. Why does useEffect cause infinite loop?
Answer:
Because state is updated inside
Q2. How do you run useEffect only once?
Q3. Can we use async directly in useEffect?
❌ No
✔ Use async function inside effect
Q4. What happens if dependency array is missing?
Effect runs on every render.
Q5. How does cleanup work?
Runs on unmount or before re-run.
Q6. Difference between useEffect and lifecycle methods?
-
componentDidMount
-
componentDidUpdate
-
componentWillUnmount
Q7. Why React warns about missing dependencies?
To prevent stale values and bugs.
3️⃣ Full React + PHP CRUD Flow (End-to-End)
🔹 Step 1: React Form
🔹 Step 2: Submit (CREATE)
🔹 Step 3: PHP Create API
🔹 Step 4: FETCH (READ)
React
🔹 Step 5: UPDATE
🔹 Step 6: DELETE
🔹 CRUD Flow Diagram
4️⃣ useEffect vs useLayoutEffect (VERY IMPORTANT)
| Feature | useEffect | useLayoutEffect |
|---|---|---|
| Execution | After paint | Before paint |
| UI blocking | ❌ No | ✔ Yes |
| Performance | Better | Slower |
| Use case | API, logs | DOM measurements |
🔹 Example Difference
useEffect
⚠️ UI may flicker
useLayoutEffect
✔ Accurate measurement
✔ No flicker
🔹 When to Use What?
✔ useEffect → 90% cases
✔ useLayoutEffect → DOM size, animations
No comments:
Post a Comment
If you have any problem please let me know.