Volver al curso

React Fundamentals

leccion
11 / 13
beginner
10 horas
Efectos y Ciclo de Vida

Introduccion a useEffect

Lectura
15 min~2 min lectura

useEffect: Efectos secundarios

useEffect te permite ejecutar codigo despues de que React actualiza el DOM. Se usa para efectos secundarios como:

  • Llamadas a APIs
  • Suscripciones
  • Manipulacion manual del DOM
  • Timers

Sintaxis basica

import { useEffect, useState } from 'react';

function Componente() {
  const [data, setData] = useState(null);

  useEffect(() => {
    // Este codigo se ejecuta despues del render
    console.log('Componente renderizado!');
  });

  return <div>{data}</div>;
}

Array de dependencias

// Se ejecuta en CADA render
useEffect(() => {
  console.log('Cada render');
});

// Se ejecuta SOLO al montar
useEffect(() => {
  console.log('Solo al montar');
}, []);

// Se ejecuta cuando cambia 'count'
useEffect(() => {
  console.log('Count cambio:', count);
}, [count]);

// Se ejecuta cuando cambia 'a' O 'b'
useEffect(() => {
  console.log('a o b cambiaron');
}, [a, b]);

Ejemplo: Fetch de datos

function UserProfile({ userId }) {
  const [user, setUser] = useState(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    setLoading(true);

    fetch(`/api/users/${userId}`)
      .then(res => res.json())
      .then(data => {
        setUser(data);
        setLoading(false);
      });
  }, [userId]); // Re-fetch cuando cambia userId

  if (loading) return <p>Cargando...</p>;

  return <h1>{user.name}</h1>;
}

Ejemplo: Titulo del documento

function Counter() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    document.title = `Contador: ${count}`;
  }, [count]);

  return (
    <button onClick={() => setCount(c => c + 1)}>
      {count}
    </button>
  );
}