todoapp-remote-functions Svelte Themes

Todoapp Remote Functions

馃殌 5 demos de una To-Do App en SvelteKit 5, explorando Runas, load/actions, y remote functions. Un recurso para aprender patrones de manejo de datos.

Buy Me a Coffee at ko-fi.com

Explorando SvelteKit: 6 Enfoques para el Manejo de Datos

Este repositorio es una demostraci贸n pr谩ctica que explora cinco arquitecturas diferentes para manejar el estado y los datos en una aplicaci贸n de lista de tareas (To-Do list) construida con SvelteKit y Svelte 5, utilizando las nuevas Runas.

Cada una de las cinco "demos" representa un enfoque distinto, desde una aplicaci贸n puramente frontend hasta una soluci贸n h铆brida y optimizada que combina lo mejor del renderizado en el servidor y las interacciones din谩micas.

Prop贸sito del Proyecto

El objetivo es comparar y contrastar diferentes patrones de gesti贸n de estado para entender sus ventajas, desventajas y casos de uso ideales. Este proyecto sirve como un recurso de aprendizaje para desarrolladores que est谩n transicionando a Svelte 5 o que desean profundizar en las capacidades de SvelteKit.


Las 5 Demos

A continuaci贸n se detalla cada una de las pruebas realizadas:

1. Tareas 1: Frontend Puro con Runas

Este es el enfoque m谩s b谩sico. Toda la l贸gica y el estado viven exclusivamente en el navegador.

  • Estado: Gestionado con la runa $state.
  • Valores Calculados: El filtrado de la lista y el conteo de tareas restantes se realizan con la runa $derived.
  • Persistencia: Se utiliza la runa $effect para guardar y cargar las tareas desde el localStorage del navegador.
  • Ideal para: Prototipos r谩pidos, aplicaciones sin conexi贸n o componentes que no necesitan un backend.

2. Uso de Signals: Frontend con get y set

Este ejemplo ilustra el manejo manual y directo del estado utilizando las runas $state, get y set.

  • Estado ($state): Se utiliza para declarar una variable reactiva.
  • Lectura (get): Permite obtener el valor actual de un estado sin crear una suscripci贸n.
  • Escritura (set): Permite asignar un nuevo valor al estado.
  • Ideal para: Implementar patrones como un historial de cambios (deshacer/rehacer) donde se necesita un control expl铆cito sobre cu谩ndo leer o escribir un valor.

3. Tareas 2: Frontend con "Signals" Externas

Este enfoque extrae la l贸gica de estado fuera del componente, creando una "signal" o "store" reutilizable, un patr贸n com煤n para compartir estado entre m煤ltiples componentes.

  • Estado Centralizado: La l贸gica ($state, $derived, $effect) vive en un archivo .svelte.ts, demostrando c贸mo la reactividad de las runas ya no est谩 limitada a los componentes.
  • Comunicaci贸n: El componente importa y consume el estado reactivo, manteniendo la UI sincronizada.
  • Ideal para: Gestionar estado global o compartido en el frontend de una manera organizada y escalable.

4. Tareas 3: Frontend + Backend (con load y actions)

Introduce la arquitectura cl谩sica y robusta de SvelteKit, donde el servidor es la fuente de verdad.

  • Carga de Datos: La funci贸n load en +page.server.ts obtiene los datos iniciales, permitiendo un renderizado en el servidor (SSR) r谩pido y amigable con el SEO.
  • Mutaciones de Datos: Los actions del formulario manejan la creaci贸n, edici贸n y eliminaci贸n de tareas. La UI se actualiza autom谩ticamente gracias a la mejora progresiva (use:enhance).
  • Ideal para: La mayor铆a de las aplicaciones web tradicionales. Es un patr贸n fiable, seguro y optimizado para el rendimiento.

5. Tareas 4: Frontend + Backend (con Remote Functions)

Explora la nueva caracter铆stica experimental de SvelteKit, las Remote Functions, para una comunicaci贸n cliente-servidor con seguridad de tipos de extremo a extremo.

  • Carga de Datos: Se usa una remote function de tipo query para obtener los datos.
  • Manejo de Carga: Requiere <svelte:boundary> para gestionar los estados de carga y error mientras se esperan los datos as铆ncronos en el cliente.
  • Mutaciones: Las funciones form y command manejan las actualizaciones, permitiendo UI Optimista para una experiencia de usuario instant谩nea.
  • Ideal para: Componentes altamente reutilizables y encapsulados, o cuando se necesita un control muy granular sobre las actualizaciones de datos.

6. Tareas 5: El Enfoque H铆brido (Lo Mejor de Ambos Mundos)

Combina la velocidad de load para la carga inicial con la flexibilidad de las remote functions para las interacciones din谩micas.

  • Carga Inicial: load en +page.server.ts proporciona los datos esenciales para un renderizado SSR inmediato.
  • Interacciones Din谩micas: Las remote functions (form, command) se utilizan para a帽adir, editar y eliminar tareas.
  • Sincronizaci贸n: Se utiliza depends en load y invalidate() en el cliente para volver a cargar los datos de forma precisa solo cuando es necesario, despu茅s de una mutaci贸n.
  • Ideal para: Aplicaciones complejas y de alto rendimiento que buscan la mejor experiencia de usuario posible.

C贸mo Ejecutar el Proyecto

  1. Clona el repositorio:

    git clone https://github.com/RbnMach/todoapp-remote-functions.git
    cd todoapp-remote-functions
    
  2. Instala las dependencias:

    npm i
    
  3. Inicia el servidor de desarrollo:

    npm run dev
    
  4. Abre http://localhost:5173 en tu navegador y explora las diferentes demos.

Tecnolog铆as Utilizadas

  • Framework: SvelteKit
  • Lenguaje: Svelte 5 (con Runas), TypeScript
  • Estilos: Tailwind CSS

Buy Me a Coffee at ko-fi.com

Top categories

Loading Svelte Themes