【问题标题】:Getting the Data in snapshot.val() but not able to treat it在 snapshot.val() 中获取数据但无法处理它
【发布时间】:2022-02-15 20:44:32
【问题描述】:

我正在制作一个应用程序,必须从实时数据库中获取数据。我正在像这样获取 snapshot.val() 中的数据

►{xz0ezxzrpkb:{…}}
▼xz0ezxzrpkb:{blood_group:"B+",cause:"Random Cause",created_on:"08-02-2022",email:"example@gmail.com",location:"Random Location",message:"Random Message",name:"Any_Name",phone_number:"+91 *********"}

现在我想访问这些数据。当我尝试 snapshot.val()[0].email
snapshot.val().[0].email 我正在尝试

undefined (2)

所以,我在 React Native 中工作,这是代码

db.ref('/requests/').on('value', (snapshot) => {
       console.log(snapshot.val())
       console.log(snapshot.val()[0].email)
       console.log(snapshot.val().[0].email)
});

数据库节点如下:

请帮帮我。

【问题讨论】:

  • 你能展示一下你的数据库的数据模型吗? IE。在您的问题中添加 Firebase 控制台的屏幕截图。

标签: javascript firebase react-native firebase-realtime-database


【解决方案1】:

虽然 Dharmaraj 回答中的方法有效,但我建议使用 Firebase 的内置 forEach 操作,因为这可确保您按照数据库返回结果的相同顺序处理结果:

db.ref('/requests/').on('value', (snapshot) => {
  snapshot.forEach((childSnapshot) => {
     console.log(childSnapshot.key)                  // "xz0ezxzrpkb"
     console.log(childSnapshot.val())                // {blood_group:"B+",cause:"Random Cause", ...
     console.log(childSnapshot.val().email)          // "example@gmail.com"
     console.log(childSnapshot.child('email').val()) // "example@gmail.com"
  })
})

【讨论】:

    【解决方案2】:

    快照值不是对象。尝试使用Object.keys() 重构代码,如下所示:

    db.ref('/requests/').on('value', (snapshot) => {
      Object.keys(snapshot.val()).forEach((key) => {
        const request = snapshot.val()[key];
        console.log(key, request.email)
      })
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      • 2021-01-16
      • 1970-01-01
      相关资源
      最近更新 更多