Getting Started with useEffect in React

Getting Started with useEffect in React

If you’re diving into React and wondering how to handle side effects in your components, meet your new best friend: useEffect. 🛠️

What the heck is a side effect? 🤔
A side effect is anything that affects something outside your component:

  • Fetching data from an API 🌐
  • Updating the DOM 🖼️
  • Setting up subscriptions or timers ⏳

How does useEffect work?
It’s a React Hook that runs code after your component renders. Think of it as a way to sync your component with the outside world.

Here’s a basic example:

import { useEffect } from 'react';  

function MyComponent() {  
  useEffect(() => {  
    console.log('Component rendered! 🎉');  

    // Optional: Clean-up logic (e.g., clear timers)  
    return () => {  
      console.log('Component unmounted! 🗑️');  
    };  
  }, []); // Empty array = runs only once  

  return <div>Hello, world! 🌍</div>;  
}  

Key Points:
1️⃣ The first argument is a function that contains your side effect.
2️⃣ The second argument is a dependency array.

  • Leave it empty ([]) to run the effect once after the first render.
  • Add dependencies (e.g., [count]) to re-run the effect when they change.

Common use cases for useEffect:

  • Fetching data:
useEffect(() => {  
  async function fetchData() {  
    const response = await fetch('https://api.example.com');  
    const data = await response.json();  
    console.log(data);  
  }  
  fetchData();  
}, []);  

Cleaning up timers or subscriptions:

useEffect(() => {  
  const interval = setInterval(() => console.log('Tick! ⏱️'), 1000);  

  return () => clearInterval(interval); // Cleanup!  
}, []);  

Pro Tip: Always clean up after yourself! React keeps things efficient by unmounting components when they’re no longer needed. Use the clean-up function to avoid memory leaks.

Got questions about useEffect? Drop them below! Let’s make React less intimidating, one hook at a time. 🚀


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *