App.js 中的 Firebase useAuth() 上下文未定义?
Firebase useAuth() context in App.js is undefined?
我有一个 AuthProvider 和 useAuth 方法,returns useContext(AuthContext) 在我的 App.js 根文件中,但是,如果我 console.log return 的值App.js 中的 useAuth() 是未定义的,为什么??
在 Loginpage 等任何其他子组件中,都会显示一个 authContext..
我的App.js:
import { AuthProvider, useAuth } from './providers/AuthProvider'
function App() {
const auth = useAuth()
console.log({ auth }) //undefined??
AuthProvider.js:
import React, { useContext, useState, useEffect } from 'react'
import { app, auth, firestore, storage } from '../firebase'
const AuthContext = React.createContext()
export function useAuth() {
return useContext(AuthContext)
}
export function AuthProvider({ children }) {
const [currentUser, setCurrentUser] = useState(undefined)
const [loginError, setLoginError] = useState(null)
const login = async (email, password) => {
try {
return auth.signInWithEmailAndPassword(email, password)
} catch (error) {
setLoginError(error)
}
}
const logout = () => auth.signOut()
useEffect(() => {
const unsubscribe = auth.onAuthStateChanged(user => {
setCurrentUser(user)
})
return unsubscribe
}, [])
const value = {
loginError,
login,
signup,
logout,
currentUser,
app,
firestore,
storage,
auth,
}
return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>
}
由于您在 App
的同一个文件中导入 AuthProvider
,这表明您没有正确使用上下文 API。
上下文值可用于上下文消费者。
Context-Consumer 是 Context-Provider 的子项,因此您的 App
组件必须是 <AuthContext.Provider>
的子项:
<AuthProvider>
<App />
</AuthProvider>
我有一个 AuthProvider 和 useAuth 方法,returns useContext(AuthContext) 在我的 App.js 根文件中,但是,如果我 console.log return 的值App.js 中的 useAuth() 是未定义的,为什么?? 在 Loginpage 等任何其他子组件中,都会显示一个 authContext..
我的App.js:
import { AuthProvider, useAuth } from './providers/AuthProvider'
function App() {
const auth = useAuth()
console.log({ auth }) //undefined??
AuthProvider.js:
import React, { useContext, useState, useEffect } from 'react'
import { app, auth, firestore, storage } from '../firebase'
const AuthContext = React.createContext()
export function useAuth() {
return useContext(AuthContext)
}
export function AuthProvider({ children }) {
const [currentUser, setCurrentUser] = useState(undefined)
const [loginError, setLoginError] = useState(null)
const login = async (email, password) => {
try {
return auth.signInWithEmailAndPassword(email, password)
} catch (error) {
setLoginError(error)
}
}
const logout = () => auth.signOut()
useEffect(() => {
const unsubscribe = auth.onAuthStateChanged(user => {
setCurrentUser(user)
})
return unsubscribe
}, [])
const value = {
loginError,
login,
signup,
logout,
currentUser,
app,
firestore,
storage,
auth,
}
return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>
}
由于您在 App
的同一个文件中导入 AuthProvider
,这表明您没有正确使用上下文 API。
上下文值可用于上下文消费者。
Context-Consumer 是 Context-Provider 的子项,因此您的 App
组件必须是 <AuthContext.Provider>
的子项:
<AuthProvider>
<App />
</AuthProvider>