TypeError:未定义不是一个对象(评估'_app.firebase.apps')

Posted

技术标签:

【中文标题】TypeError:未定义不是一个对象(评估\'_app.firebase.apps\')【英文标题】:TypeError: undefined is not an object (evaluating '_app.firebase.apps')TypeError:未定义不是一个对象(评估'_app.firebase.apps') 【发布时间】:2022-01-17 11:35:33 【问题描述】:

有人可以帮忙解决这个类型错误吗?我正在尝试通过 expo go 应用程序连接到 firebase,并且在我有 firebase 的每个地方都会出现此错误。我猜测问题出在导入上,因为初始导入对于 firebase 来说已经过时了。如果我没有正确进行导入,我很想知道。

我的代码如下:

// @refresh reset
import React , useState, useEffect, useCallback from 'react';
import AsyncStorage from '@react-native-async-storage/async-storage'
import  StyleSheet, Text, TextInput, Button, View  from 'react-native';
import  initializeApp, firebase  from "firebase/app";
import  getFirestore, collection, getDocs  from 'firebase/firestore/lite';
import  GiftedChat  from 'react-native-gifted-chat'

const firebaseConfig = 
//info for database
;

if (firebase.apps.length === 0) //THIS IS WHERE THE ERROR KEEPS COMING UP FIRST
  firebase.initializeApp(firebaseConfig)



const db = firebase.firestore()
const chatsRef = db.collection('chats')

export default function App() 
    const [user, setUser] = useState(null)
    const [name, setName] = useState('')
    const [messages, setMessages] = useState([])

    useEffect(() => 
        readUser()
        const unsubscribe = chatsRef.onSnapshot((querySnapshot) => 
            const messagesFirestore = querySnapshot
                .docChanges()
                .filter(( type ) => type === 'added')
                .map(( doc ) => 
                    const message = doc.data()
                    //createdAt is firebase.firestore.Timestamp instance
                    //https://firebase.google.com/docs/reference/js/firebase.firestore.Timestamp
                    return  ...message, createdAt: message.createdAt.toDate() 
                )
                .sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime())
            appendMessages(messagesFirestore)
        )
        return () => unsubscribe()
    , [])

    const appendMessages = useCallback(
        (messages) => 
            setMessages((previousMessages) => GiftedChat.append(previousMessages, messages))
        ,
        [messages]
    )

    async function readUser() 
        const user = await AsyncStorage.getItem('user')
        if (user) 
            setUser(JSON.parse(user))
        
    
    async function handlePress() 
        const _id = Math.random().toString(36).substring(7)
        const user =  _id, name 
        await AsyncStorage.setItem('user', JSON.stringify(user))
        setUser(user)
    
    async function handleSend(messages) 
        const writes = messages.map((m) => chatsRef.add(m))
        await Promise.all(writes)
    

    if (!user) 
        return (
            <View style=styles.container>
                <TextInput style=styles.input placeholder="Enter your name" value=name onChangeText=setName />
                <Button onPress=handlePress title="Enter the chat" />
            </View>
        )
    
    return <GiftedChat messages=messages user=user onSend=handleSend />


const styles = StyleSheet.create(
    container: 
        flex: 1,
        backgroundColor: '#fff',
        alignItems: 'center',
        justifyContent: 'center',
        padding: 30,
    ,
    input: 
        height: 50,
        width: '100%',
        borderWidth: 1,
        padding: 15,
        marginBottom: 20,
        borderColor: 'gray',
    ,
)

【问题讨论】:

请检查此链接以解决您的问题:a click here! 【参考方案1】:

不要将 firebase 用于 react-native 应用的 web 应用。它适用于最简单的事情,但没有针对它进行优化,在进一步开发应用程序时会遇到很多麻烦。我也这样做了,但最终没有成功。 使用react-native-firebase。这将毫无问题地工作,并且不需要很长时间来设置

【讨论】:

我正在使用 expo go 并查看了 react native firebase。它说我不能将它与 expo go 应用程序一起使用。是否有与 expo go 应用兼容的替代方案? 不,没有。添加 firebase react-native 后,您无法使用 ExpoGo。使用 npx build-android/ios 然后 npx run-android/ios 在模拟器或真机上构建。

以上是关于TypeError:未定义不是一个对象(评估'_app.firebase.apps')的主要内容,如果未能解决你的问题,请参考以下文章

如何在本机反应中修复“TypeError:未定义不是对象(评估'_reactNativeCamera.default.constants')”错误?

TypeError:未定义不是一个对象(评估'details.date.getTime')

TypeError:未定义不是对象(评估'this.setState')[重复]

TypeError:未定义不是对象(评估“window.location.href”)

TypeError:未定义不是对象(评估'array.length')反应原生[关闭]

TypeError:未定义不是对象(评估“appState.remove”)