Skip to content

Latest commit

History

History
88 lines (69 loc) 路 3.43 KB

File metadata and controls

88 lines (69 loc) 路 3.43 KB

馃寪 Datos, APIs y Asincron铆a

MitaDOM abraza las caracter铆sticas as铆ncronas modernas de JavaScript (async/await, fetch, Promesas) integr谩ndolas naturalmente con el sistema de Signals.

1. Consumo de APIs Externas (Fetch)

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);
    });
  }
}

2. Base de Datos Local y Persistencia

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.

Adaptador de Storage

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贸?

  1. Lectura Autom谩tica: Al arrancar la SPA, el Signal busca en localStorage (o en IndexedDB si proporcionas un adaptador personalizado) si existe la clave mita_spa_carrito. Si existe, inicializa la variable con esos datos instant谩neamente.
  2. Escritura Autom谩tica: Cada vez que ejecutas estadoCarrito.patch() o estadoCarrito.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.

3. Manejo Inteligente de Errores (Error Boundaries Locales)

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().