es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Limitar la velocidad de lectura/escritura en Firestore sin sacrificar la reactividad de Svelte.

Estoy construyendo una calculadora de hipoteca.

Tengo un campo de Precio de Compra y un campo de Pago inicial. Ambos tienen un deslizador de rango. La calculadora presenta el Montante en dólares (reactivamente) mientras ajustas ya sea el precio de compra o el pago inicial.

Tengo Firestore en el backend, pero enviar actualizaciones desde el deslizador de rango a Firestore podría resultar costoso muy rápido.

¿Hay alguna manera de regular las lecturas/escrituras con Firestore sin sacrificar la naturaleza reactiva de Svelte en el front-end?

Me imagino un almacén de Svelte entre la Vista y Firestore, pero ¿cómo sincronizarías el almacén de Svelte y Firestore?

Es más complicado que solo una calculadora de hipoteca, solo pensé que era una gran analogía.

También, necesito que los datos persistan por usuario si volvieran a visitar más tarde.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, se puede utilizar un almacén Svelte para limitar la velocidad de lectura y escritura con Firestore sin sacrificar la reactividad. Una forma de sincronizar el almacén Svelte y Firestore es utilizando el método onSnapshot() de Firebase para escuchar cambios en la base de datos y actualizar el almacén en consecuencia.

    Aquí presentamos un ejemplo de cómo puedes implementarlo en tu calculadora de hipoteca:

    1. Crea un almacén Svelte utilizando la función writable():
    import { writable } from 'svelte/store';
    
    export const mortgageData = writable({ purchasePrice: 0, downPayment: 0 });
    
    1. En tu componente que contiene los deslizadores de rango, suscríbete a cambios en el almacén y actualiza Firestore utilizando la función debounce() de Lodash:
    import { onMount } from 'svelte';
    import { mortgageData } from '../stores/mortgageData';
    import { debounce } from 'lodash';
    import firebase from 'firebase/app';
    import 'firebase/firestore';
    
    const db = firebase.firestore();
    
    let unsub;
    
    onMount(() => {
      unsub = mortgageData.subscribe(debounce(val => {
        db.collection('users').doc('user1').update({
          purchasePrice: val.purchasePrice,
          downPayment: val.downPayment
        })
      }, 1000));
    });
    
    onDestroy(() => {
      unsub();
    });
    

    En este ejemplo, utilizamos la función debounce() de Lodash para esperar 1000 milisegundos antes de actualizar Firestore con los últimos datos del almacén.

    1. Para sincronizar el almacén Svelte con Firestore, podemos utilizar el método onSnapshot() de Firebase para escuchar cambios en la base de datos:
    import { onMount } from 'svelte';
    import { mortgageData } from '../stores/mortgageData';
    import firebase from 'firebase/app';
    import 'firebase/firestore';
    
    const db = firebase.firestore();
    
    let unsub;
    
    onMount(() => {
      unsub = db.collection('users').doc('user1').onSnapshot(doc => {
        mortgageData.set(doc.data());
      });
    });
    
    onDestroy(() => {
      unsub();
    });
    

    En este ejemplo, utilizamos onSnapshot() para escuchar cambios en el documento ‘users/user1’ en Firestore y actualizar el almacén con los últimos datos.

    Con esta implementación, puedes limitar la velocidad de lectura y escritura a Firestore sin sacrificar la reactividad en tu aplicación Svelte, además de mantener los datos de usuario entre sesiones.

Comments are closed.