useEffect manages side effects in React components. Here's how to use it correctly.
Basic Patterns
Data Fetching
Event Listeners
Subscriptions
Timers
Document Effects
Common Pitfalls
Sync vs Effects
Testing Effects
Best Practices
Dependencies:
✓ Include all values used inside effect
✓ Use primitives when possible
✓ Memoize objects and functions
✓ Use refs for non-reactive values
Cleanup:
✓ Always clean up subscriptions
✓ Cancel pending requests
✓ Clear timers
✓ Remove event listeners
Structure:
✓ Keep effects focused
✓ Split unrelated logic
✓ Extract into custom hooks
✓ Avoid effects for derived state
Conclusion
useEffect handles side effects like data fetching, subscriptions, and DOM manipulation. Always clean up effects, include all dependencies, and avoid common pitfalls like infinite loops. Extract reusable logic into custom hooks and compute derived state during render rather than in effects.