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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 20:07:57