Firebase 错误:未创建 Firebase 应用默认值

Posted

技术标签:

【中文标题】Firebase 错误:未创建 Firebase 应用默认值【英文标题】:Firebase error: No firebase app default has been created 【发布时间】:2021-09-28 20:39:46 【问题描述】:

我正在使用 react-native 和 redux 制作一个送餐应用。我想从 firebase 存储中获取数据,为此,我在 actions.js 中编写了一个函数,但每当我运行应用程序时,它都会显示错误

Firebase: No Firebase App '[DEFAULT]' has been created - call Firebase App.initializeApp() (app/no-app).

这是我用来获取数据的函数 action.js

import firebase from "firebase"
export const ProductDetails = (data) => 
  return 
    type: "PRODUCT_ITEMS",
    payload: 
      data,
    ,
  ;
;

var db = firebase.firestore();
var docRef = db.collection("Products").doc("Items");
export const FetchItems = () => 
  return async function (dispatch) 
    return await docRef
      .get()
      .then((doc) => 
        if (doc.exists) 
          console.log("Document Data", doc.data());
          dispatch(ProductDetails(doc.data));
         else 
          console.log("NO such document");
        
      )
      .catch((error) => 
        console.log(error);
      );
  ;
;

这是我的 App.js 文件

import React,  useState  from "react";
import  StyleSheet, Text, View, Dimensions  from "react-native";
import  NavigationContainer  from "@react-navigation/native";
import AppStack from "./components/navigation/AppStack";

import firebase from "firebase";
import Provider from "redux"
import store from "./store"

import  useDispatch, useSelector, Provider  from "react-redux";
import store from "./redux/store";
import AppWrapper from "./AppWrapper";

export default function App() 
  
  const firebaseConfig = 
  ;
  if (firebase.apps.length === 0) 
    firebase.initializeApp(firebaseConfig);
  
  return  (
    <Provider store=store>
      <NavigationContainer>
        <AppStack />
      </NavigationContainer>
    </Provider>
  );;



【问题讨论】:

【参考方案1】:

我认为我的错误是由 Webpack 分块(引导程序)引起的。我确实使用initializeApp() 导入了文件。我的工作是为谁有同样的问题。

    initializeApp 模块化在一个文件中(对我来说是initFire)并导出任何内容(不必是app) 在首次使用getApp()之前导入和导出(getAuth() 等方法会调用它), 这样,Webpack 之后还是会先运行。 (ES6 export app from "./initFire")

(此答案来自my own GitHub Wiki,并非抄袭)

【讨论】:

【参考方案2】:

我建议创建一个单独的文件 firebase.js 并在初始化后从那里导出 Firebase 服务。

firebase.js

import firebase from 'firebase/app';
import 'firebase/firestore'

const firebaseConfig = ...;

if (!firebase.apps.length) 
  firebase.initializeApp(config);


export const auth = firebase.auth();
export const firestore = firebase.firestore()

然后在需要的地方导入它们:

// App.js for example

import firestore, auth from './firebase.js'

//var docRef = firestore.collection("Products").doc("Items");

【讨论】:

谢谢兄弟,这对我有帮助,我又加了一行if(firebase.apps.length===0)firebase.initializeApp(config) @AyushKumar 是的,很高兴拥有。我会更新答案:D firebase.auth()返回的auth服务实例是否保证保持最新?例如,auth.currentUser === firebase.auth().currentUser 会一直吗? @Ninjakannon 是的,如果您需要实时更新,那么您应该使用onAuthStateChanged

以上是关于Firebase 错误:未创建 Firebase 应用默认值的主要内容,如果未能解决你的问题,请参考以下文章

未创建任何 firebase 应用程序“默认” - 调用 firebase.initializeapp()

未创建 Firebase 动态链接 - 离子

Vuejs 和 Firebase 存储问题。未捕获的类型错误:存储不是函数

Firebase ReferenceError:未定义PostData

未安装 Ionic Firebase 插件

未找到 Firebase 对象