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()
Vuejs 和 Firebase 存储问题。未捕获的类型错误:存储不是函数