当访问子火库时,什么是 "app "属性(javascript)?

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

这是我初始化firebase的文件。

export default class {
  static parent = RNFirebase.initializeApp();
  static child = null;

  constructor() {
    child = this.parent.database('child-database-url');
  }
}

在另一个文件中,我用这个作为:

import FDBS from '../initializer';

FDBS.child.app.database().ref('orders').once("value", data => {
  console.log(data);
});

这行代码让我很困惑 FDBS.child.app.database().ref( 实际上 .app. 为什么我需要访问这个属性来获取数据其实我想获取的是能够写出这样的代码。FDBS.child.database().ref('orders').once(...

firebase firebase-realtime-database react-native-firebase
1个回答
1
投票

首先,让我们修正一下你的语法错误,关于在你的 initializer.js 文件。对于这样一个简单的数据结构,不需要使用一个类,只需要导出一个对象即可。

import RNFirebase from '@react-native-firebase/app';
import '@react-native-firebase/database';

// inits & returns the default FirebaseApp instance
const parent = RNFirebase.initializeApp(); // or RNFirebase.app() if initialized automatically

// gets a FirebaseDatabase instance that points to 'child-database-url'
const child = parent.database('child-database-url');

export default {
  parent, // this is a FirebaseApp object
  child   // this is a FirebaseDatabase object
}

现在,如上面的片段所示,你的 parent 对象的一个实例。FirebaseApp 对象和 child 对象的一个实例。FirebaseDatabase 对象。

在您的代码中,加载到 FDBS,您可以访问 FDBS.child.app (参考),它返回的是 FirebaseApp 的实例相关联的对象。FirebaseDatabase - 在您的情况下,这个对象是 FDBS.parent.

由于这两个对象的类型不同,我建议选择导出两个 FirebaseApp 一两例 FirebaseDatabase 实例。

出口 FirebaseApp 实例

根据你的问题,你似乎在期待着 child 对象也是 FirebaseApp 对象,因为你想调用 FDBS.child.database().ref(...).

import RNFirebase from '@react-native-firebase/app';
import '@react-native-firebase/database';

const parent = RNFirebase.initializeApp(/* config */); // or RNFirebase.app()
const child = RNFirebase.initializeApp({
  ...parent.options, // copies everything from the default app's configuration
  databaseURL: 'child-database-url' // but overwrites the value of databaseURL
});

export default {
  parent, // this is a FirebaseApp object that uses the default "parent" database
  child   // this is a FirebaseApp object that uses the "child" database
}

你会按以下方式使用。

import FDBS from '../initializer';

FDBS.child.database().ref('orders').once("value", data => {
  console.log(data);
});

当你涉及到身份验证时,这种方法会带来一个问题。如果一个用户登录到你的应用程序中,他们将在默认的FirebaseApp实例中登录,而不是在由 FDBS.child 除非你明确地这样做)。正因为如此,我推荐另一种方法。

导出 FirebaseDatabase 实例

import RNFirebase from '@react-native-firebase/app';
import '@react-native-firebase/database';

const defaultApp = RNFirebase.initializeApp(/* config */); // or RNFirebase.app()

const dbParent = defaultApp.database();
const dbChild = defaultApp.database('child-database-url');

export default {
  // app: defaultApp, // (if you want to export the FirebaseApp object too)
  parent: dbParent, // this is a FirebaseDatabase object that points to the default "parent" database
  child: dbChild    // this is a FirebaseDatabase object that points to the "child" database
}

您可以按以下方式使用。

import FDBS from '../initializer';

FDBS.child.ref('orders').once("value", data => {
  console.log(data);
});

注意: 不要忘记处理错误。我鼓励使用承诺而不是回调。


0
投票

编辑回复您的评论

您没有说明RNFirebase的来源,但您应该可以像这样访问您的数据库。

let initapp = RNFirebase.initializeApp() let db = initapp.database('url') db.ref....

现在你已经用一种迂回的方式做到了这一点。

child = this.parent.database(

而如果你检查一下你是如何定义parent的,基本上就像我上面提供的片段一样。

所以,你可以再简洁一点,不要那么循环。

--

从官方文档中。https:/firebase.google.comdocsreferencejsfirebase.database.Database#app。

与数据库服务实例相关联的app。

其中app上有数据库属性,其中包括 https:/firebase.google.comdocsreferencejsfirebase.app.App#数据库。

获取当前应用程序的数据库服务。 例子

var database = app.database();
// The above is shorthand for:
// var database = firebase.database(app);  
© www.soinside.com 2019 - 2024. All rights reserved.