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,提问作者Валентин Бабенков
相关产品推荐
相关产品推荐

