JavaScript de Cero a Experto / Proyectos + retos
Proyecto: Mi Bolsillo definitivo (CRUD + localStorage)
Llegó el día. "Mi Bolsillo" ha crecido contigo desde el módulo 5 —objetos, render, eventos, persistencia— y hoy alcanza su forma final: una app de gastos COMPLETA. Agregar, editar, borrar, filtrar, total en vivo, y todo sobrevive a la recarga. Es tu primer proyecto de portafolio, y junta la mitad del curso en una sola pieza.
Reto
Mi Bolsillo definitivo
Qué debes construir
Una app de gastos con CRUD completo y persistencia. La estructura, según el método de las cinco preguntas:
- Fuente de verdad: un array
gastos, cada uno{ id, nombre, valor, categoria }. - Operaciones: agregar, editar (actualizar uno existente), borrar.
- Render: una función
render()que pinta la lista, el total y el desglose por categoría desde el array. - Eventos: el formulario agrega/edita; los botones de cada fila editan o borran; un select filtra por categoría.
- Persistencia: cada cambio se guarda en
localStorage; al cargar, se restaura.
Requisitos concretos:
- Agregar: el formulario toma nombre, valor (número) y categoría; valida
(nombre no vacío, valor
> 0) y muestra un mensaje si algo falla —sin agregar basura. - Editar: al pulsar "Editar" en una fila, el formulario se rellena con ese gasto y el botón pasa a "Guardar cambios"; al enviar, ACTUALIZA ese gasto en vez de crear uno nuevo.
- Borrar: cada fila tiene su botón; usa delegación de eventos (módulo 8).
- Filtrar: un select "todas / comida / transporte / ocio" que muestra solo esa categoría, sin perder los demás datos.
- Total y desglose: el total general (formateado en pesos con
Intl) y el subtotal por categoría, ambos en vivo. - Persistencia: recarga el preview y todo sigue ahí.
Reglas
- El array
gastoses la ÚNICA fuente de verdad; el DOM solo lo refleja. Todo cambio pasa por: mutar el array → guardar →render(). - Datos de usuario al DOM con
textContentocreateElement, NUNCAinnerHTML(la regla XSS del módulo 7). - Usa el guard
iniciar()conDOMContentLoaded(módulo 7). - Separa la lógica pura (
calcularTotal,porCategoria) del render y los eventos.
180:00
Cuando estés listo, arranca el reloj.
Qué sigue
Dominaste el estado local y la persistencia. El siguiente proyecto sale a
internet: un buscador que consume una API real, con búsqueda mientras
escribes, estados de carga y paginación —los patrones de toda app que muestra
datos de un servidor. Y usarás por primera vez el debounce que construirás en
los retos.