Я потратил несколько дней, пытаясь понять это, так что, надеюсь, вы сможете мне помочь.Я хочу получать сообщения из базы данных Cloud Firestore и отображать их в приложении React.
Мои данные в Firestore структурированы следующим образом:
[проект] / NewsPosts / [документы]
Каждый документ структурирован в пожарном хранилище следующим образом:
[случайно сгенерированный идентификатор]
- title: [string]
- body: [string]
Я получаю сообщения, выполняя следующие действия:
let posts= [];
//db = firebase.firestore();
db.collections.("NewsPosts").get().then((snapshot) => (
snapshot.forEach((doc) => (
posts.push({
id: doc.id,
title: doc.data().title,
body: doc.data().body
})
))
));
Это успешно создает массив объектов с информациейЯ хочу, так что получение данных не проблема.Однако, когда я иду на карту этого массива для создания сообщений, ничего не создается.Я пробовал каждую вариацию массивов отображения для создания компонентов, но это не работает.
Однако, когда я жестко кодирую массив объектов и сопоставляю его, он работает.Например, это работает с жестко закодированным массивом объектов:
//hard is the hardcoded array
let displayPosts = hard.map((p) => (
<div key={p.id}>
<h1>{p.title}</h1>
<p>{p.body}</p>
</div>
))
return(
<Page>
{displayPosts}
</Page>
);
Когда я сравнил жестко закодированный массив и другой массив в консоли браузера, массивы выглядят по-разному.
Я полагаю, что именно эта разница в массивах вызывает проблему.
Вот так они выглядят в консоли браузера, если есть 2 элемента:
(2)[{...},{...}] (hardcoded)
[] (array filled from firestore)
Однако в консоли браузера все остальное в массивах одинаковое.
Почему эти массивы выглядят по-разному?Это то, что мешает мне правильно отображать объекты в каждом индексе?Как заставить отображение работать с массивом объектов, извлеченных из Firestore?
Заранее благодарю за помощь!Это вызвало у меня сильную головную боль.