Pie*_*scy 19 firebase react-native firebase-realtime-database react-native-android
firebase@3.3.0
react-native v0.32在带有wifi的android设备上测试
Firebase数据库没有任何身份验证规则,它是开放式读写.
给定以下文件结构:
|_ firebase.js
|_ actions.js
Run Code Online (Sandbox Code Playgroud)
这不起作用:
firebase.js
import firebase from 'firebase'
const config = {
apiKey: "*****",
authDomain: "****",
databaseURL: "*****",
storageBucket: "*****",
}
firebase.database.enableLogging(true);
export default firebase.initializeApp(config)
Run Code Online (Sandbox Code Playgroud)
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)
})
}
Run Code Online (Sandbox Code Playgroud)
调试输出
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
Run Code Online (Sandbox Code Playgroud)
没有其他的...
这确实有效(但它不是解决方案):
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
产量
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
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?我也注意到,一旦我import firebase from 'firebase',firebase变量在所有不是firebase来自import语句的var 的文件中全局可用(我可以写import FooBar from 'firebase',我firebase仍然导入了全局变量)
因为似乎没有人有“官方”答案。这是我提供某种延迟初始化的解决方法:
\n\nfirebase.js
\n\nimport Firebase from \'firebase\'\n\nlet _database = null\n\nconst initFirebase = () => {\n var config = {\n apiKey: "*************",\n authDomain: "************",\n databaseURL: "**********",\n storageBucket: "************",\n }\n\n Firebase.database.enableLogging(true)\n Firebase.initializeApp(config)\n}\n\nexport const getDatabase = () => {\n if (!_database) {\n initFirebase()\n _database = Firebase.database()\n }\n return _database\n}\nRun Code Online (Sandbox Code Playgroud)\n\n然后,在任何您需要的地方database:
import { getDatabase }\xc2\xa0from \'./firebase\'\n\nconst methodThatNeedDatabase = () => {\n getDatabase().ref(\'/some/ref\')\n ...\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
617 次 |
| 最近记录: |