Saltar al contenido
Curso de React
Todos los cursos

Ejercicio: Efectos con useEffect

  • ⏱ 30 minutos
  • 📶 Nivel: principiante

Objetivo

Crear un borrador que se guarda solo, actualiza el título de la pestaña y se recupera al volver.

Cómo se trabaja

Escribe un componente llamado App (puedes crear los demás que necesites). Prueba tu código en el editor de abajo; cuando funcione, pega todo el archivo en el comprobador. Los import de react se aceptan y se ignoran, porque aquí React ya está cargado.

⚛️ Tu editor de React (empieza desde aquí)
Consola

Pasos

Marca cada paso a medida que lo completes. Tu avance se guarda en este navegador.

💡 Pista 1: dos efectos

Es mejor tener un efecto por cada tarea: uno para localStorage y otro para document.title, ambos con [texto].

💡 Pista 2: leer al inicio

Usa useState(() => localStorage.getItem("borrador") || "").

🔎 Comprueba tu trabajo

Pega tu código y pulsa Comprobar. La revisión ocurre en tu navegador; nada se envía a ningún sitio. Cada punto en rojo incluye una pista.

    ✅ Ver una solución posible

    Intenta resolverlo antes de mirar. Tu versión puede ser distinta y también correcta.

    App.jsx
    import { useState, useEffect } from "react";
    
    export default function App() {
      const [texto, setTexto] = useState(() => localStorage.getItem("borrador") || "");
    
      useEffect(() => {
        localStorage.setItem("borrador", texto);
      }, [texto]);
    
      useEffect(() => {
        document.title = "Caracteres: " + texto.length;
      }, [texto]);
    
      return (
        <main>
          <textarea value={texto} onChange={(e) => setTexto(e.target.value)} rows={4} />
          <p className="contador">{texto.length}</p>
          <button onClick={() => setTexto("")}>Borrar</button>
        </main>
      );
    }

    💡 🏁 Reto extra (opcional)

    Añade un aviso «Guardado hace un momento» que aparezca 1 segundo después de dejar de escribir (usa setTimeout y su limpieza).