Для начала давайте исправим синтаксическую ошибку, касающуюся переменных "stati c" в вашем файле 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
экземпляра.
Export FirebaseApp
instance
Исходя из вашего вопроса, вы, вероятно, ожидаете, что объект 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);
});
Примечание: Не забывайте обрабатывать ошибки. Я рекомендую использовать обещания, а не обратные вызовы.