La base de données Firebase 3.3 en temps réel est collée à "faire une tentative de connexion" avec React Native 0.32
firebase@3.3.0
réagir indigènes v0.32 testé sur appareil android avec wifi
la base de données Firebase n'a pas de règles d'auth, elle est ouverte en lecture et écriture.
étant donné la structure de fichier suivante:
|_ firebase.js
|_ actions.js
Cela ne fonctionne pas :
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)
})
}
sortie de débogage
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
Rien d'autre...
Ceci fonctionne (mais ce n'est pas une solution) :
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's obviously not a good solution since we can't initialize the app multiple times
sortie
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
Ce que je fais mal ? J'ai aussi remarqué qu'une fois que j' import firebase from 'firebase'
, le firebase
la variable est disponible globalement dans tous les fichiers qui ne sont pas le firebase
var de l'instruction d'importation (j'aurais pu écrire import FooBar from 'firebase'
, le firebase
global var est toujours importée)
1 réponses
puisque personne ne semble avoir de réponse "officielle". Voici la solution que j'ai trouvée pour fournir une sorte d'initialisation paresseuse:
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
}
alors, n'importe où vous avez besoin de la database
:
import { getDatabase } from './firebase'
const methodThatNeedDatabase = () => {
getDatabase().ref('/some/ref')
...
}