转换Firebase快照值的架构

时间:2019-04-13 18:03:51

标签: javascript reactjs firebase firebase-realtime-database

我想在我的React应用程序启动后立即从Firebase导入数据。

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 个答案:

答案 0 :(得分: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数组中拥有一个对象数组...