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

React Native集成CCXT库报错:无法将BigInt转换为数字

React Native集成CCXT库遇BigInt转Number错误的解决办法

问题详情

  • 报错内容:

LogBox.js:173 Possible Unhandled Promise Rejection (id: 0):
TypeError: Cannot convert a BigInt value to a number

  • 已尝试无效操作:注释掉node_modules/metro-react-native-babel-preset/src/configs/main.js中的以下代码:
// if (!isHermes && (isNull || src.indexOf("**") !== -1)) {   
//  extraPlugins.push([   
//  require("@babel/plugin-transform-exponentiation-operator"),   
//   ]);
// }
  • 项目依赖版本:
"react": "17.0.2",  
"react-native": "0.68.2",
"ccxt": "^1.90.57",

可行解决步骤

1. 用Babel插件转换BigInt

先安装转换插件:

npm install --save-dev @babel/plugin-transform-bigint

然后修改项目根目录的babel.config.js,添加该插件:

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

2. 手动转换CCXT返回的BigInt字段

如果不想改Babel配置,可以在获取数据后手动把BigInt转成Number:

import ccxt from 'ccxt';

const binance = new ccxt.binance();

async function fetchMarketData() {
  try {
    const ticker = await binance.fetchTicker('BTC/USDT');
    // 按需转换BigInt字段为Number
    const formattedData = {
      ...ticker,
      last: Number(ticker.last),
      high: Number(ticker.high),
      low: Number(ticker.low),
      volume: Number(ticker.volume),
    };
    console.log(formattedData);
  } catch (err) {
    console.error(err);
  }
}

3. 禁用Hermes引擎(不推荐,仅作为备选)

React Native 0.68.2默认启用的Hermes对BigInt支持有限,可尝试禁用:
打开android/app/build.gradle,修改配置:

project.ext.react = [
  enableHermes: false,
]

清理缓存后重新构建:

cd android && ./gradlew clean && cd .. && npx react-native run-android

内容的提问来源于stack exchange,提问作者Валентин Бабенков

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 11:15:33