Expo 48升级后调用FireStore报Undefined is not a function错误求助
Expo 48 Hermes引擎下FireStore上传数据报“Undefined is not a function”的解决方案
核心问题分析
Expo 48默认启用Hermes引擎,你当前使用的Firebase 9.7.0版本可能与该引擎存在兼容性冲突,尤其在异步操作的错误处理逻辑中触发了未定义函数调用。
具体解决步骤
升级Firebase依赖至兼容版本
Expo 48适配的React Native 0.71.x需要搭配更新的Firebase版本,建议升级到9.22.0及以上:npm install firebase@^9.22.0 # 或使用yarn yarn add firebase@^9.22.0排查FireStore上传代码的错误处理
避免在catch块中调用错误对象的未确认方法,先打印完整错误信息定位问题:try { await firestore().collection('target-collection').add(uploadData); } catch (error) { // 打印完整错误信息,避免直接调用可能未定义的方法 console.log('FireStore上传错误详情:', error); console.log('错误类型:', typeof error); console.log('错误栈:', error.stack); }确认Hermes配置正确性
在app.json或app.config.js中检查Hermes启用配置,确保无冲突:{ "expo": { "jsEngine": "hermes" } }清理缓存并重建项目
升级后缓存可能导致依赖冲突,执行以下命令清理重建:npx expo start --clear rm -rf node_modules && npm install检查其他依赖的兼容性
部分旧依赖可能与Expo 48不兼容:react-native-elements可替换为@rneui/themed和@rneui/base- 确认
expo-leaflet是否支持React Native 0.71.x,必要时升级或替换
临时替代方案
若上述步骤未解决问题,可在Expo 48中暂时切换回JSC引擎,修改app.json:
{ "expo": { "jsEngine": "jsc" } }
但长期建议适配Hermes以获取更好性能。
内容的提问来源于stack exchange,提问作者yuu
相关产品推荐
相关产品推荐

