Преобразование архитектуры значения моментального снимка Firebase

#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 массиве…