我正在使用react native实现firebase,这是我正在使用的版本
"firebase": "^5.4.1",
"react-native": "0.56.0",
"react": "16.4.1",
但是当我导入firebase时,它显示以下错误:
undefined is not a function (evaluating '_iterator2[typeof Symbol === "function" ? Symbol.iterator : "@@iterator"]()')
注意::仅在Android设备上会收到此错误,在iOS上可以正常使用。
答案 0 :(得分:10)
导入Firebase时遇到相同的问题,并找到了解决方法here
在您的index.js中添加它
// index.js
global.Symbol = require('core-js/es6/symbol');
require('core-js/fn/symbol/iterator');
require('core-js/fn/map');
require('core-js/fn/set');
require('core-js/fn/array/find');
我看到的方式是,某些JS语法无法很好地转换为android理解。
答案 1 :(得分:0)
@Syph提供的解决方案不足以让我完美运行,我必须在“ index.js”中添加以下内容,并且对我有用。
global.Symbol = require('core-js/es6/symbol');
require('core-js/fn/symbol/iterator');
require('core-js/fn/map');
require('core-js/fn/set');
require('core-js/fn/array/find');
if (Platform.OS === 'android') {
if (typeof Symbol === 'undefined') {
if (Array.prototype['@@iterator'] === undefined) {
Array.prototype['@@iterator'] = function () {
let i = 0;
return {
next: () => ({
done: i >= this.length,
value: this[i++],
}),
};
};
}
}
}
答案 2 :(得分:0)
Android可能无法理解导入Firebase时的这些JS语法。将这些代码添加到index.js可能会解决该问题。
注意:如果您有单独的index.android.js,请将这些代码添加到该文件中。
global.Symbol = require('core-js/es6/symbol');
require('core-js/fn/symbol/iterator');
require('core-js/fn/map');
require('core-js/fn/set');
require('core-js/fn/array/find');
答案 3 :(得分:0)
我首先尝试了解决方案,但是解决了我的错误的步骤是:
创建一个polyfills文件代码并将其放入名为 polyfills.js 的文件中,该文件与 index.js 位于同一级别(我的react-本机项目)
代码:
global.Symbol = require('core-js/es6/symbol');
require('core-js/fn/symbol/iterator');
require('core-js/fn/map');
require('core-js/fn/set');
require('core-js/fn/array/find');
import './polyfills.js';
现在重新加载应用程序(按R两次)。希望它有效!