#react-native #react-context
Вопрос:
Я пытаюсь прочитать из контекста (который, как я проверил, заполнен правильно) функциональный компонент на App.js, Я не определяюсь, когда ставлю приложение в фоновом режиме…
Вот App.js
import AppContext from './Context/AppContext.js'
export default function App() {
const contextValue = useContext(AppContext);
const appState = useRef(AppState.currentState);
const [appStateVisible, setAppStateVisible] = useState(appState.current);
const defaultProviderValue = {userInfo: {}}
const [fontsLoaded ,setFontsLoaded] = useState(false);
useEffect(() => {
AppState.addEventListener("change", _handleAppStateChange);
_loadFontsAsync();
}, [])
const _handleAppStateChange = (nextAppState) => {
console.log("CONTEXT a _handleAppStateChange: " JSON.stringify(contextValue)); // I get: "CONTEXT a _handleAppStateChange: undefined"
if ( nextAppState !== "active" ) {
console.log("Starting Saving!");
if (contextValue amp;amp; contextValue.userinfo) {
AsyncStorage.setItem("userinfo", JSON.stringify(this.context.userInfo));
console.log("Data saved!");
}
}
};
const fonts = {
'Roboto': require('native-base/Fonts/Roboto.ttf'),
'Roboto_medium': require('native-base/Fonts/Roboto_medium.ttf'),
...Ionicons.font,
};
async function _loadFontsAsync() {
await Font.loadAsync(fonts);
setFontsLoaded(true)
}
if (!fontsLoaded ) {
return null;
}
return (
<Root>
<UserProvider value = {defaultProviderValue}>
<Container>
<AppNavigator />
</Container>
</UserProvider>
</Root>
)
}
AppContext.js
import React, { Component } from 'react'
const AppContext = React.createContext();
class UserProvider extends Component {
// Context state
state = {
userInfo: {},
}
// Method to update state
setUserInfo = (user) => {
this.setState({userInfo: user })
}
render() {
const { children } = this.props
const { userInfo } = this.state
const { setUserInfo } = this
return (
<AppContext.Provider
value={{
userInfo,
setUserInfo,
}}
>
{children}
</AppContext.Provider>
)
}
}
export default AppContext;
export { UserProvider };
Контекст правильный, как и на другом экране (на главном экране), который является экраном компонента класса, контекст заполнен правильными данными.
есть идеи, почему не работает над моим app.js?
Комментарии:
1. Похоже, что ваш контекст является дочерним по отношению к приложению. Вы не можете
useContext
получить его от нижестоящего поставщика, он должен исходить от родителя, иначе ваше приложение должно быть завернуто вAppContext.Provider
2. Как мне ее решить?
3. Я думаю, узнайте, как использовать контекст из документации. Вы читали эту страницу? reactjs.org/docs/context.html
4. да, в чем же проблема?
5.
<AppContext.Provider>
необходимо обернуть компоненты, которые пытаются получить доступ к его контексту. Ваше приложение является родителем Провайдер> » это должно быть дитя ит