【问题标题】:Firebase error: No firebase app default has been createdFirebase 错误:未创建 Firebase 应用默认值
【发布时间】: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>
  );;
}


【问题讨论】:

    标签: reactjs firebase react-native redux


    【解决方案1】:

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

    1. initializeApp 模块化在一个文件中(对我来说是initFire)并导出任何内容(不必是app
    2. 在首次使用getApp()之前导入和导出(getAuth() 等方法会调用它),
    3. 这样,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
      猜你喜欢
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-25
      • 2021-08-14
      • 1970-01-01
      • 2019-10-31
      相关资源
      最近更新 更多