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.
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.
A continuaci贸n se detalla cada una de las pruebas realizadas:
Este es el enfoque m谩s b谩sico. Toda la l贸gica y el estado viven exclusivamente en el navegador.
$state
.$derived
.$effect
para guardar y cargar las tareas desde el localStorage
del navegador.Este ejemplo ilustra el manejo manual y directo del estado utilizando las runas $state
, get
y set
.
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.
$state
, $derived
, $effect
) vive en un archivo .svelte.ts
, demostrando c贸mo la reactividad de las runas ya no est谩 limitada a los componentes.load
y actions
)Introduce la arquitectura cl谩sica y robusta de SvelteKit, donde el servidor es la fuente de verdad.
load
en +page.server.ts
obtiene los datos iniciales, permitiendo un renderizado en el servidor (SSR) r谩pido y amigable con el SEO.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
).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.
remote function
de tipo query
para obtener los datos.<svelte:boundary>
para gestionar los estados de carga y error mientras se esperan los datos as铆ncronos en el cliente.form
y command
manejan las actualizaciones, permitiendo UI Optimista para una experiencia de usuario instant谩nea.Combina la velocidad de load
para la carga inicial con la flexibilidad de las remote functions
para las interacciones din谩micas.
load
en +page.server.ts
proporciona los datos esenciales para un renderizado SSR inmediato.remote functions
(form
, command
) se utilizan para a帽adir, editar y eliminar tareas.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.Clona el repositorio:
git clone https://github.com/RbnMach/todoapp-remote-functions.git
cd todoapp-remote-functions
Instala las dependencias:
npm i
Inicia el servidor de desarrollo:
npm run dev
Abre http://localhost:5173 en tu navegador y explora las diferentes demos.