TypeError: _app.default.auth 不是一个函数 - React Native Web - Firebase

Posted

技术标签:

【中文标题】TypeError: _app.default.auth 不是一个函数 - React Native Web - Firebase【英文标题】:TypeError: _app.default.auth is not a function - React Native Web - Firebase 【发布时间】:2022-01-19 17:51:54 【问题描述】:

我目前正在 React Native Web 上开发一个项目,这是我在组件中的登录调用。 (调用在组件useEffect中,组件一打开,就应该匿名登录)

import firebase from 'firebase/compat/app'
import 'firebase/compat/auth'
const firebaseConfig = 
        apiKey: "****",
        authDomain: "****",
        projectId: "****",
        storageBucket: "****",
        messagingSenderId: "****",
        appId: "****",
        measurementId: "****"
      ;
      firebase.initializeApp(firebaseConfig) 

const login = async () => 
        firebase.auth().signInAnonymously() 
            .then((userCredential) => 
                // Signed in
                // ...
              )
              .catch((error) => 
                console.log("LOG: "+error)
              );
     

但每次我得到错误:未捕获(承诺)类型错误:_app.default.auth 不是函数

我尝试了几种不同的导入方式,但似乎都不起作用。 当我在 Firefox 上打开控制台时,我看到了错误。我该如何解决这个问题?

谢谢

【问题讨论】:

你在useEffect中有firebase初始化函数吗?我认为这可能是因为在初始化 firebase 之前调用了 auth() 函数。 不幸的是,它不起作用,我都尝试了:在 useEffect 中初始化,在 useEffect 之外,与登录调用相同的 useEffect,只是一切 【参考方案1】:

通过检查 firebase 是否已初始化且用户未登录来尝试此方法:

const [loggedIn, setLoggedIn] = React.useState(false)

React.useEffect(() => 
    if (!firebase.apps.length) 
        firebase.initializeApp(
            apiKey: "****",
            authDomain: "****",
            projectId: "****",
            storageBucket: "****",
            messagingSenderId: "****",
            appId: "****",
            measurementId: "****"
        );
    
, [])

React.useEffect(() => 
    if (firebase.apps.length && !loggedIn) 
        setLoggedIn(true)
        login()
    
, [firebase])

const login = async () => 
    firebase.auth().signInAnonymously()
        .then((userCredential) => 
            // Signed in
            // ...
        )
        .catch((error) => 
            console.log("LOG: " + error)
        );
 

【讨论】:

很遗憾,还是同样的错误

以上是关于TypeError: _app.default.auth 不是一个函数 - React Native Web - Firebase的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:“__ensemble__”对象不可调用

TypeError: __init__() 得到了一个意外的关键字参数“评分”

TypeError: __init__() 接受 2 个位置参数,但给出了 4 个

TypeError: __init__() 接受 1 个位置参数,但给出了 3 个

TypeError:“NoneType”对象没有属性“__getitem__”

TypeError: __init__() 接受 1 个位置参数,但给出了 2 个