Firebase:在响应中从Firestore读取数据

问题描述 投票:1回答:1

我正在尝试关注this tutorial

在尝试重新配置firebase.js配置之前,我已经进行了此项工作,以便可以在应用程序中包括身份验证。

我正在尝试从我的应用程序中的集合中读取以下内容:

useEffect(() => {
    let options = [];
    // console.log(Firebase.db.collection("abs_for_codes"));
    // Firebase.db.return
    console.log(Firebase.db);
    Firebase.db
      .collection("abs_for_codes")
      .get()
      .then(
        function(querySnapshot) {
          querySnapshot.forEach(function(doc) {
            options.push({
              value: doc.data().title.replace(/( )/g, ""),
              label: doc.data().title + " - ABS " + doc.id
            });
          });

这一切正常,直到我重新定义了firebase配置。

以前,该配置文件如下定义了一个firebase const:

import * as firebase from "firebase";
import firestore from "firebase/firestore";
import app from 'firebase/app';

const Firebase = app.initializeApp(config);

export default Firebase;

现在,我有:

import firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/firestore';

class Firebase {
  constructor() {
    firebase.initializeApp(config).firestore();
    this.auth = firebase.auth();
    // this.db = app.database();

    // this.db = app.firebase.database()
    this.db = firebase.firestore();

  }  
}
export default Firebase;

[当我尝试使用此功能时,我可以在应用程序中登录Firebase,该应用程序会产生以下输出:

class Firebase {
  constructor() {
    firebase.initializeApp(config).firestore();
    this.auth = firebase.auth();
    // this.db = app.database();

    // this.db = app.firebase.database()
    this.db = firebase.firestore();

  }  

我希望能够登录Firebase.db以返回Firestore,但它会产生未定义的内容。

然后,当我尝试访问Firestore中的集合时,出现错误消息:

TypeError:无法读取未定义的属性'collection'

我已经看到this post,这表明与找不到数据库有关是一个问题,而不是收集问题。

旧的定义数据库方法与新的方法之间的唯一区别是,它位于类方法而不是const中。

如果在一个类中设置了firebase配置,是否还需要一些额外的东西?

javascript reactjs firebase google-cloud-firestore
1个回答
0
投票

您需要创建实例 Firebase class才能访问其属性。

更改

Firebase.db
   .collection("abs_for_codes")
   .get()
   .then(querySnapshot => {
     // do something here
   });

to

const firebase = new Firebase();
firebase.db
   .collection("abs_for_codes")
   .get()
   .then(querySnapshot => {
     // do something here
   });
© www.soinside.com 2019 - 2024. All rights reserved.