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.

Firebase: ¿cómo añadir un ID de documento auto-generado al documento en Svelte?

¿Cuál es la forma correcta de agregar un documento de Firebase con un ID generado automáticamente en Svelte?

Hasta ahora, estoy usando el siguiente fragmento de código:

db.collection('colname').add({ id:'temp', text:'sometext' }).then(
    result=>{
        db.collection('colname').doc(result.id).update({id: result.id});
    }
);

Lo que no me gusta de esta solución:
1. Hay 2 interacciones separadas con la base de datos.
2. Svelte renderiza el contenido 2 veces, es decir, después de cada interacción con la base de datos. Esta también es la razón por la que necesito agregar un ID temporal en add().

¿Existe alguna solución más simple?


Contexto:

Quiero pasar el documento como parámetro a un subcomponente de Svelte:

let docs = [];
db.collection('colname').onSnapshot(data =>{
    docs=data.docs;    
});

(...)

{#each docs as doc}
<sveltesubcomponent {...doc.data()}/="">
{/each}

Quiero poder acceder al ID del documento en el SvelteSubComponent.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La forma correcta de agregar un documento de Firebase con un id generado automáticamente en Svelte es:

    db.collection('nombreColeccion').add({ texto: 'algúntexto' })
      .then(docRef => {
        const id = docRef.id;
        const docData = { ...docRef.data(), id };
        // utilizamos docData como parámetro para SvelteSubComponent o actualizamos el documento
        db.collection('nombreColeccion').doc(id).set(docData);
      });
    

    En esta solución, solo interactuamos con la base de datos una vez y podemos acceder al id generado automáticamente inmediatamente después de agregar el documento. Utilizamos la sintaxis de propagación para agregar el id a los datos del documento y luego lo pasamos como parámetro al SvelteSubComponent. Alternativamente, podemos actualizar el documento con el id como se muestra en la segunda línea de la función de retorno. De esta manera, solo renderizamos el contenido una vez y evitamos la necesidad de un id temporal.

Comments are closed.