刚刚使用react-native加载firebase 3.0并收到错误
[致命] [tid:com.facebook.react.RCTExceptionsManagerQueue]未处理 JS异常:无法找到变量:document
是否支持react-native?
React-native code:
var firebase = require('firebase')
// Initialize Firebase
var config = {
apiKey: '<apiKey>',
authDomain: '<app>.firebaseapp.com',
databaseURL: 'https://<app>.firebaseio.com',
storageBucket: 'firebase-<app>.appspot.com'
};
firebase.config(config)
答案 0 :(得分:13)
最新版本的firebase使用Web应用程序中使用的文档变量,而RCTWebSocket或RCTView的工作方式不同。 (我对所有细节都不是100%肯定)。无论如何,你可以安装旧版本的firebase,它将适合你。假设你安装了npm,请按照这些说明进行操作。
答案 1 :(得分:8)
Firebase JS SDK 3.1 just got released,现在与React Native兼容!
请参阅release notes。
答案 2 :(得分:2)
RN(但..)不支持Firebase 3.x.
我认为该问题与auth
模块对浏览器的window
变量的依赖性有关。
根据Firebase团队的以下讨论主题,他们目前正致力于3.x支持。但是没有设置发布时间范围。
选项1(使用FB 2.x)
来自雅各布温格:
如果React Native支持对您有阻止,请继续使用 我们解决此问题之前的2.x.x SDK。 2.x.x SDK会 继续工作,即使在您迁移到新控制台之后......`
选项2(使用FB 3.x)
来自雅各布温格:
作为一种“解决方法”,如果你不需要auth(不太可能,我知道,但仍然 值得一提的是,你应该能够做到以下几点:
var app = require('firebase / app');
var database = require('firebase / database');
答案 3 :(得分:2)
我可以通过将以下内容放在.js文件中并将其导入index.ios.js顶部来使Firebase 3.0.2加载到React Native中:
global.location = {
href: ''
};
global.screen = {
};
global.document = {
getElementsByTagName: function(){}
};
global.parent = global;
可能还有其他问题 - 我没有进一步探讨过这个问题,但可能会让Firebase 3为您服务。
答案 4 :(得分:1)
要将最新版本的Firebase与ReactNative一起使用,您可以使用Firebase Bridge。
我有一个演示应用here。
答案 5 :(得分:0)
虽然Firebase JS SDK现在可以在native native上运行,但它主要是针对Web构建的,并且通常不是本地反应的最佳解决方案。
Firebase Web SDK完全依赖于本机的JS thread运行,因此会影响您的应用程序帧速率(该链接很好地解释了这一点)。
在我的测试中,原生firebase SDK的速度比使用Web SDK快大约2-3倍。
但是除了潜在的性能影响之外,还有很多功能你将无法在Android / ios设备上使用web SDK。例如:
最好的方法是使用原生的android / ios firebase sdk运行,并在它们和你的js代码之间建立一个桥梁(即本机模块设置)。
谢天谢地,你不必自己实现,已经有模块可以为你做这个:
例如,react-native-firebase镜像了web sdk的api js端,但是在本机端使用本机android&amp; ios firebase sdk's。它与您可能已经实现的任何现有firebase js逻辑完全兼容,并且旨在替代web sdk。
(免责声明:我是react-native-firebase的作者)