【问题标题】:How fetch data from firebase realtime database in react js如何在 React js 中从 firebase 实时数据库中获取数据
【发布时间】:2021-10-24 14:37:53
【问题描述】:

我正在尝试在 React 中从 Firebase 获取数据。 我的数据结构如下:

我的代码目前如下所示:

fire.database().ref(outputClassName).once("value", snapshot => {
      let classStudents = [];
      snapshot.forEach(snapsh => {
        //classStudents.push(snapsh.val());
        let student = "";
        student = snapsh.val();
        alert(student);
        fire.database().ref(outputClassName).child(student).once("value", snapsho => {
          let studentSubjects = [];
          snapsho.forEach(snaps => {
            //studentSubjects.push(snaps.val());

            fire.database().ref(outputClassName).child(student).child(snaps.val()).once("value", snapsh => {
              let subjectNotes = [];
              snapsh.forEach(snap => {

                subjectNotes.push(snap.val());

              });

              studentSubjects.push(subjectNotes);

            });
          });

          classStudents.push(studentSubjects);

        });

      });
      setRenderData(classStudents);
    });

我收到此代码的错误。有人可以帮我提供一个可行的解决方案吗?

【问题讨论】:

  • 请编辑您的问题并将代码添加为文本而不是图像。此外,在这个用例中您是否需要实时监听器,或者您只想在运行 outputData() 时获取一次数据?
  • 我只想在函数 outputData() 运行时获取数据。
  • 好吧,你不应该使用.on(),因为它会在数据库中发生更改时获取数据。请改用.once()
  • 我尝试使用“.once()”,但对于这行代码fire.firebase().ref(outputClassName).child(student).on("value", snapshot => { 仍然出现同样的错误,错误提示:firebase__WEBPACK_IMPORTED_MODULE_1__.default.firebase is not a function
  • 你试过我的答案了吗?而且你没有在你的问题中提到任何错误。你能添加错误的截图吗?

标签: javascript reactjs firebase firebase-realtime-database


【解决方案1】:

当数据只需要获取一次时,您应该使用.once() 而不是.on()。此外,当您在路径 /10 A 处获取数据时,它将获取完整的节点,因此您不必再次请求该班级中每个学生的数据。

function outputData() {
    fire.database().ref(outputClassName).once("value").then((snapshot) => {
      const classData = snapshot.val()
      const students = Object.keys(classData)

      students.forEach((student, i) => {
        const subjects = Object.keys(classData[student])
        console.log(`${i+1} Name: ${student}`)
        console.log(`Subjects: ${JSON.stringify(subjects)}`)
        console.log("===")

        // render the data to HTML as per needs
      })
    })
}

【讨论】:

  • 对于您的解决方案,我收到下一个错误:Unhandled Rejection (TypeError): snapshot.data is not a function
  • @Elisei_01 我的错。应该是snapshot.val()
  • 它可以工作,但它没有得到注释。它只得到类、名称和主题。
  • 笔记存储在哪里@Elisei_01?
  • 截图中可以看到班级:10 A,学生:Daria Popa,科目:Chim,注:8
猜你喜欢
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 2019-01-17
  • 1970-01-01
相关资源
最近更新 更多