#javascript #reactjs #firebase #firebase-realtime-database
# #javascript #reactjs #огневая база #firebase-база данных в реальном времени
Вопрос:
Я пытаюсь импортировать данные из Firebase сразу после запуска моего приложения React.
firebase.database().ref('rooms/room0/messages').on('value', (snapshot) => {
let roomMessages = snapshot.val()
if (roomMessages !== null) {this.setState({messages: [roomMessages]})}
console.log(roomMessages)
Проблема в том, что я не могу заставить Firebase возвращать мои сообщения в виде простого массива объектов. После того, как я запустил приведенный выше код, он вставляет этот объект в мое состояние:
{message0: {...}, message1: {...}}
Я хочу получать такие данные:
{{...}, {...}}
Как я могу этого добиться? Заранее благодарю вас.
Комментарии:
1. На самом деле вы не можете изменить способ возврата данных в моментальном снимке. Однако вы можете написать код для преобразования данных в нужный вам формат.
Ответ №1:
Поскольку это обычная работа с массивами, Firebase допускает это… Попробуйте что-то вроде этого:
firebase.database()
.ref('rooms/room0/messages')
.once('value')
.then(snapshot => {
const messages = [];
snapshot.forEach(childSnapshot => {
messages.push({
id: childSnapshot.key,
...childSnapshot.val()
})
})
})
Теперь у вас будет массив объектов в messages
массиве…