我目前正在尝试在一个react原生应用程序中使用context。我的context代码如下所示:
import React, { useState, createContext } from 'react'
export const AuthContext = createContext()
export const AuthProvider = ({ children }) => {
const [currentUser, setCurrentUser] = useState(null)
return (
<AuthContext.Provider value={{ currentUser}}>
{children}
</AuthContext.Provider>
)
}
然后,我将上下文导入App.js,并将App.js Package 在提供程序中,如下所示:
import React, { useContext } from 'react'
import { AuthProvider, AuthContext } from './src/Context/AuthContext'
other imports etc...
export default function App() {
const { currentUser } = useContext(AuthContext)
return (
<>
<AuthProvider>
<IconRegistry icons={EvaIconsPack} />
<NavigationContainer>
<RootStackScreen isAuth={false} />
</NavigationContainer>
</AuthProvider>
</>
)
}
当我尝试访问app.js中的currentUser时,收到以下错误:
component exception: undefined is not an object, evalauting useContext.currentUser
如果我尝试在应用程序的其他组件中访问当前用户;但是,我没有收到此错误,currentUser控制台日志的正确值为null。我想知道我如何才能访问app.js中的上下文。是否可以在auth提供程序中 Package react-native应用程序的index.js?或者我在上下文方面做错了什么。
react-native版本:0.63.3版本React:16.13.1
2条答案
按热度按时间lqfhib0f1#
这是因为您正在访问提供程序外部的上下文。
如果选中createContext,则表示未提供默认值。
在提供程序外部调用useContext时,它将使用默认值(在您的情况下为“undefined”),并且在您尝试访问undefined的currentUser属性时引发错误。
解决此问题的一种方法是使用app.js文件中的状态,而不是使用单独的提供程序组件。
这不会对其他组件产生任何影响,而且您可以像访问任何状态一样轻松地访问currentUser变量。
w1jd8yoj2#
我没有使用上面的答案,但是我把
AuthContext.Provider
移到了index.js
文件中,并把App
组件封装在其中。现在它对我来说工作得很好。我这样做是因为在App.js
中,由于导航和路由逻辑,我有很大的代码。使用它,我们可以保持上下文逻辑的分离。
例如