Expo项目中使用Firestore时出现Firebase App未初始化报错的问题求助
Expo项目中使用Firestore时出现Firebase App未初始化报错的问题求助
嗨,我一眼就看出你卡在哪啦!你现在的代码同时混用了Firebase的新模块化SDK和旧兼容版(compat)SDK,这就是触发报错的核心原因~
咱们拆解下问题:你用initializeApp(新模块化API)初始化了App,但添加数据的时候却调用了firebase.firestore()(旧兼容版的命名空间写法),而兼容版的Firebase App根本没被初始化,所以才会抛出No Firebase App '[DEFAULT]' has been created这个错误。
给你两种清晰的解决思路,选一种适配你的习惯就行:
方案一:完全使用新的模块化SDK(官方推荐)
既然已经用了getFirestore,那后续操作统一用模块化API,更贴合Firestore现在的最佳实践:
先保留你的初始化代码(注意补充导入需要的方法):
import { getFirestore, collection, addDoc } from "firebase/firestore/lite"; import { initializeApp } from 'firebase/app'; const firebaseConfig = { apiKey: "my api key", authDomain: "my domain", projectId: "my project id", storageBucket: "my bucket", messagingSenderId: "my sender id", appId: "my app id", measurementId: "some id" }; // Initialize Firebase const app = initializeApp(firebaseConfig); const db = getFirestore(app);
然后修改添加数据的代码,用模块化的collection和addDoc方法:
try { const docRef = await addDoc(collection(db, 'requests', 'trucks', 'order'), { name: 'John doe', email: 'Johndoe@gmsil.com' // 这里你原来的代码少了个引号,记得补上哦! }); console.log('文档已添加,ID:', docRef.id); // navigation.navigate(SearchView) } catch (e) { console.error('添加文档失败:', e); }
方案二:完全使用兼容版(compat)SDK
如果你更习惯旧的命名空间写法,那把初始化和操作全换成compat版本:
初始化代码改成:
import firebase from 'firebase/compat/app'; import 'firebase/compat/firestore'; const firebaseConfig = { apiKey: "my api key", authDomain: "my domain", projectId: "my project id", storageBucket: "my bucket", messagingSenderId: "my sender id", appId: "my app id", measurementId: "some id" }; // 初始化兼容版的Firebase App(避免重复初始化) if (!firebase.apps.length) { firebase.initializeApp(firebaseConfig); } const db = firebase.firestore();
然后你的添加数据代码就可以正常用了(记得补上email的引号):
firebase.firestore().collection('requests').doc('trucks').collection('order') .add({ name: 'John doe', email: 'Johndoe@gmsil.com', // 补上缺失的引号 }).then(() => { console.log('added') // navigation.navigate(SearchView) }).catch(err => { console.error('添加失败:', err); })
最后提个小细节:你原来的添加代码里email字段的字符串结尾少了一个引号,这个小bug也得修好,不然代码运行也会出错哦~
备注:内容来源于stack exchange,提问作者Eric Uche
相关产品推荐
相关产品推荐

