useState para manejar estado.useEffect para efectos secundarios.useRef, useContext.Maneja estado local en un componente.
import { useState } from "react";
export default function Contador() {
const [count, setCount] = useState(0);
return (
<button onClick={() => setCount(count + 1)}>
Clics: {count}
</button>
);
}
const [usuario, setUsuario] = useState({
nombre: "Ana",
edad: 25
});
function actualizarNombre() {
setUsuario({ ...usuario, nombre: "María" });
}
Usa el operador ... (spread) para no perder propiedades previas.
Permite ejecutar código cuando el componente se renderiza o cambian dependencias.
import { useState, useEffect } from "react";
export default function DatosUsuario({ id }) {
const [usuario, setUsuario] = useState(null);
useEffect(() => {
fetch(`/api/usuarios/${id}`)
.then(res => res.json())
.then(data => setUsuario(data));
}, [id]);
return usuario ? <p>{usuario.nombre}</p> : <p>Cargando...</p>;
}
Ideal para limpiar suscripciones, temporizadores o listeners.
useEffect(() => {
const timer = setInterval(() => {
console.log("tick");
}, 1000);
return () => clearInterval(timer); // limpieza
}, []);
useRef → referencia mutable a un valor o elemento DOM.useContext → consume valores de un contexto global.useReducer → maneja estados complejos con un reducer.useMemo y useCallback → optimizan cálculos y funciones.<Reloj /> que muestre la hora actual usando useState.useEffect para actualizar la hora cada segundo con setInterval.