Soy novato y acabo de empezar a codificar hace un par de meses. Estoy creando una aplicación con React Native con Expo y tengo problemas para actualizar un campo de mapa en el documento. Hasta ahora, cuando necesitaba actualizar un archivo (por ejemplo, un nombre), estaba haciendo lo siguiente:
const updateData = async () => { await updateDoc(doc(db,"users",uid),{ name:name, age: age, })El problema es que ahora tengo un campo de mapa que almacena datos de la siguiente manera:
La forma en que tengo la aplicación configurada es que tengo una matriz para los alimentos:
const [item, setItem] = useState([ {Food: 'tomato', Calories: 20, Quantity: 1,}, {Food: 'lettuce', Calories: 10, Quantity: 1,}, ]);y me gustaría almacenarlo en un campo de mapa en el documento de Firestore.
Pensé que sería capaz de usar un bucle for, de modo que pudiera completar cada campo de un elemento de matriz en el mapa, pero parece que no puedo usar un bucle dentro de await.
¿Hay alguna solución alternativa que pueda usar en este caso?
El bucle for que está resaltado en rojo:
await updateDoc(doc(db,"user",uid),{ for (let i = 0; i < item.length; i++) { } }, { merge: true })Para convertir la matriz en un mapa, intente usar reduce() como se muestra a continuación:
const updatedMap = item.reduce((a, b) => { a[b.Food] = b; return a; }, {}) await updateDoc(doc(db, "user", uid), { food: updatedMap })Esto usará el nombre del alimento como clave en el mapa de alimentos y la prueba del objeto como valor.