MitaDOM abraza las caracter铆sticas as铆ncronas modernas de JavaScript (async/await, fetch, Promesas) integr谩ndolas naturalmente con el sistema de Signals.
No necesitas librer铆as como Axios o React Query. La API nativa fetch de HTML5 junto con un Signal local es suficiente para crear interfaces robustas que manejan estados de "Carga", "Error" y "脡xito".
import { crearEstadoLocal, MitaElement } from 'mita-dom';
export class ListaUsuarios extends MitaElement {
constructor() {
super();
// Signal local que contiene el estado completo de la petici贸n
this.estadoPeticion = crearEstadoLocal({
cargando: true,
error: null,
datos: []
});
}
async connectedCallback() {
// Al conectarnos al DOM, llamamos a la API
try {
const res = await fetch('https://jsonplaceholder.typicode.com/users');
if (!res.ok) throw new Error('Error en la API');
const usuarios = await res.json();
// Actualizamos el Signal con los datos
this.estadoPeticion.patch({ cargando: false, datos: usuarios });
} catch (err) {
this.estadoPeticion.patch({ cargando: false, error: err.message });
}
}
iniciarLogica() {
const $container = this.querySelector('.resultados');
this.estadoPeticion.suscribir(estado => {
if (estado.cargando) {
$container.innerHTML = '<p>Cargando usuarios...</p>';
return;
}
if (estado.error) {
$container.innerHTML = `<p class="error">${estado.error}</p>`;
return;
}
// Renderizamos la lista real usando el Granular DOM
const fragmento = document.createDocumentFragment();
estado.datos.forEach(user => {
const li = document.createElement('li');
li.textContent = user.name;
fragmento.appendChild(li);
});
$container.innerHTML = '';
$container.appendChild(fragmento);
});
}
}Las Single Page Applications necesitan a menudo guardar datos en el dispositivo del usuario (localStorage o IndexedDB).
MitaDOM ofrece persistencia autom谩tica en sus Signals mediante opciones de inicializaci贸n.
Cuando creas un Signal global, puedes pasarle la clave persistKey.
import { crearEstadoGlobal } from 'mita-dom';
const estadoCarrito = crearEstadoGlobal([], {
persistKey: 'mita_spa_carrito',
immutable: true // Recomendado para arrays complejos
});驴Qu茅 sucede bajo el cap贸?
- Lectura Autom谩tica: Al arrancar la SPA, el Signal busca en
localStorage(o en IndexedDB si proporcionas un adaptador personalizado) si existe la clavemita_spa_carrito. Si existe, inicializa la variable con esos datos instant谩neamente. - Escritura Autom谩tica: Cada vez que ejecutas
estadoCarrito.patch()oestadoCarrito.update(), el Signal guarda la copia serializada en el almacenamiento local en un micro-tick, garantizando que el usuario jam谩s pierda sus datos si cierra la pesta帽a accidentalmente.
Recuerda que MitaElement ya act煤a como un Error Boundary. Si durante un fetch ocurre un error no manejado que crashea tu componente, el resto de la aplicaci贸n (el Sidebar, el Header) seguir谩 funcionando perfectamente, y ese componente espec铆fico renderizar谩 la vista fallbackUI().