Подтвердить что ты не робот

Firebase 3.3 база данных реального времени, привязанная к "Создание попытки подключения" с помощью React Native 0.32

[email protected]

response-native v0.32, протестированный на Android-устройстве с Wi-Fi

В базе данных Firebase нет правил auth, они открывают чтение и запись.

Учитывая следующую структуру файла:

|_ firebase.js
|_ actions.js

Это не работает:

firebase.js

import firebase from 'firebase'

const config = {
    apiKey: "*****",
    authDomain: "****",
    databaseURL: "*****",
    storageBucket: "*****",
}

firebase.database.enableLogging(true);

export default firebase.initializeApp(config)

actions.js

import firebase from './firebase'

export const fetchData = () => {
    const Data = firebase.database().ref('some/data')
    Data.on('value', (snapshot) => {
        console.log("snapshot", snapshot.val())  // never printed
    }, (error) => {
        console.error(error)
    })
}

отладочный вывод

p:0: Browser went online.  
firebase-database.js:36 p:0: Listen called for /some/data default  
firebase-database.js:36 p:0: Making a connection attempt

Больше ничего...


Это работает (но это не решение):

firebase.js

...same content as above...

export default () => firebase.initializeApp(config)  // we export a function instead to trigger the initialization when the app is ready

actions.js

...same content as above...
const Data = firebase().database().ref('some/data') // we "manually" trigger the initialization, it obviously not a good solution since we can't initialize the app multiple times

Выход

p:0: Browser went online.  
firebase-database.js:36 p:0: Listen called for /some/data default  
firebase-database.js:36 p:0: Making a connection attempt  
firebase-database.js:36 p:0: Auth token refreshed  
firebase-database.js:36 getToken() completed. Creating connection. 
firebase-database.js:36 c:0:0: Connection created  

Что я здесь делаю неправильно? Я также заметил, что после я import firebase from 'firebase' переменная firebase доступна глобально во всех файлах, которые НЕ являются firebase var из оператора импорта (я мог бы написать import FooBar from 'firebase', глобальный var firebase все еще импортированы)

4b9b3361

Ответ 1

Так как никто, кажется, не имеет "официального" ответа. Вот обходной путь, с которым я пришел, чтобы дать какую-то ленивую инициализацию:

firebase.js

import Firebase from 'firebase'

let _database = null

const initFirebase = () => {
    var config = {
        apiKey: "*************",
        authDomain: "************",
        databaseURL: "**********",
        storageBucket: "************",
    }

    Firebase.database.enableLogging(true)
    Firebase.initializeApp(config)
}

export const getDatabase = () => {
    if (!_database) {
        initFirebase()
        _database = Firebase.database()
    }
    return _database
}

Затем в любом месте вам понадобится database:

import { getDatabase } from './firebase'

const methodThatNeedDatabase = () => {
    getDatabase().ref('/some/ref')
    ...
}