Итак, я хотел бы заполнить массив данными из firestore, я просто не уверен, как именно это сделать.
У меня есть доступ к информации пользователя и моментальному снимку данных элементов:
auth.onAuthStateChanged(user => {
if (user) {
db.collection('items').onSnapshot(snapshot => {
setupItems(snapshot.docs);
setupUI(user);
userDetails(user);
}, err =>{
console.log(err.message);
})
} else {
setupUI();
setupItems([]);
userDetails();
}
});
Это работает в другой части моего проекта, чтобы заполнить литералы шаблонов деталями из моей коллекции 'items', а также позволяет мне получить доступ к UID текущего пользователя и его специфическому c документу в коллекции пользователей.
В настоящее время у меня есть это жестко запрограммированное:
const products = [
{
id: 1,
img: './cod.jpeg',
name: 'Call of Duty',
price: 3,
cart: false,
quantity: 1,
total: 0
},
{
id: 2,
img: './fonv.jpeg',
name: 'Fallout:New Vegas',
price: 4,
cart: false,
quantity: 1,
total: 0
},
{
id: 3,
img: './ror2.jpeg',
name: 'Risk of Rain 2',
price: 5,
cart: false,
quantity: 1,
total: 0
}
];
У меня также есть точно такие же поля в моей коллекции элементов в firestore, т.е. в документе A есть строковое имя поля с яблоком, строковое поле img с URL-адресом, целочисленное поле price с числом et c.
Есть ли способ сделать это, например:
const products = [
{
id: filled by firebase,
img: filled by firebase,
name: filled by firebase,
price: filled by firebase,
cart: false,
quantity: 1,
total: 0
}
Я знаю, что выбрал бы foreach l oop против кодирования каждого элемента, но я не уверен, как назначить поля против жесткого кодирования.
РЕДАКТИРОВАТЬ
После добавления этого:
const itemsx = (data) => {
if (data.length) {
data.forEach(doc => {
const item = doc.data();
products = [
{
id: item.uid,
img: item.artwork,
name: item.gamename,
price: item.price,
cart: false,
quantity: 1,
total: 0
}
];
console.log(products)
});
} else {
console.log('If you see this, preschoolers are more competent than you at this point.');
}
}
I получить правильные выходные данные в консоли, однако, products [] оказывается в ловушке внутри itemsx и больше не доступен глобально. (Я добавил itemsx (snapshot.docs) в метод onAuthStateChange)
Я делаю что-то ужасно неправильно, я знаю, что делаю что-то ужасно неправильно, я на шаг впереди, но теперь застрял, может ли кто-нибудь увидеть то, что я не могу.