You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React-Native Android端Symbol Iterator报错求助:已试coreJs方案无效

解决React Native Android端_.keys()迭代器错误的方案

我之前也碰到过这个一模一样的问题,折腾了好一阵子才搞定,给你几个亲测有效的解决方案:

1. 统一lodash版本,解决兼容性问题

这个错误大概率是lodash版本和React Native的Android JS引擎(比如Hermes)不兼容导致的。旧版lodash对Symbol迭代器的处理在Android环境下有缺陷,建议你升级或降级到经过验证的稳定版本,比如4.17.21,这个版本在大部分RN项目里都能正常工作:

# npm
npm install lodash@4.17.21 --save
# yarn
yarn add lodash@4.17.21

2. 正确配置Babel Polyfill

你之前尝试过core-js但没解决,可能是配置方式不对。需要在Babel里明确引入core-js 3的polyfill,覆盖Symbol相关的特性:
首先安装依赖:

npm install @babel/plugin-transform-runtime core-js@3 --save-dev

然后修改babel.config.js:

module.exports = {
  presets: ['module:metro-react-native-babel-preset'],
  plugins: [
    ['@babel/plugin-transform-runtime', {
      corejs: 3
    }]
  ]
};

修改后清理metro缓存:

npx react-native start --reset-cache

3. 临时补丁:给Object.keys结果添加迭代器

如果上面的方法都没生效,可以在项目入口文件(比如index.js)最顶部添加这段代码,强制给Object.keys()返回的数组挂载迭代器:

// 给Object.keys的返回值添加Symbol迭代器,适配Android JS引擎
if (typeof Symbol !== 'undefined' && typeof Object.keys === 'function') {
  const keysResult = Object.keys({});
  if (!keysResult[Symbol.iterator]) {
    Object.defineProperty(Object.keys.prototype, Symbol.iterator, {
      value: Array.prototype[Symbol.iterator],
      writable: true,
      configurable: true
    });
  }
}

这是个临时修复方案,建议还是优先从版本兼容性入手解决。

4. 排查第三方库的lodash冲突

有些第三方React Native组件库可能内置了旧版本的lodash,和你项目中的版本产生冲突。可以用以下命令查看依赖树:

# npm
npm ls lodash
# yarn
yarn list lodash

如果发现多个lodash版本,在package.json里强制统一版本:

  • 对于npm:
"overrides": {
  "lodash": "^4.17.21"
}
  • 对于yarn:
"resolutions": {
  "lodash": "^4.17.21"
}

然后重新安装依赖:

# npm
npm install
# yarn
yarn install

问题根源补充

这个错误本质是:在Android的JS引擎中,_.keys()返回的数组没有正确挂载Symbol.iterator,导致无法被迭代(比如用for...of循环遍历),而iOS的JS引擎对这部分特性的支持更完善,所以不会触发错误。

内容的提问来源于stack exchange,提问作者Tim Smart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:15:11