Я создаю приложение с выбором тем, я понял, что допустил некоторые ошибки, но я продолжу этот путь, я хотел бы знать, возможно ли получить доступ к этой функции setDefaultColor через дочерний компонент, используя React Context API.
import React, {useEffect, useState, createContext} from 'react';
import {View, StatusBar} from 'react-native';
import AsyncStorage from '@react-native-community/async-storage';
import ThemeContext from './src/Themes/context';
import * as Theme from './src/Themes/themes';
import AppNavigator from './src/navigation/AppNavigator';
export default function App(props) {
const [theme, setTheme] = useState('black');
const [barStyle, setBarStyle] = useState('default');
const [idCity, setIdCity] = useState();
async function getThemeStorage() {
const id = await AsyncStorage.getItem('idCity');
if (id) {
setIdCity(id);
}
const data = await AsyncStorage.getItem('theme');
if (data) {
if (data === 'white') {
setBarStyle('dark-content');
}
setTheme(data);
}
}
useEffect(() => {
getThemeStorage();
}, []);
const setDefaultColor = skin => {
setTheme(skin);
if (skin === 'white') {
setBarStyle('dark-content');
} else {
setBarStyle('default');
}
AsyncStorage.setItem('theme', skin);
};
useEffect(() => {
console.log(props);
}, []);
return (
<ThemeContext.Provider value={Theme[theme], setDefaultColor}>
<StatusBar barStyle={barStyle} backgroundColor={Theme[theme].backGround} />
<View style={{flex: 1}}>
<AppNavigator />
</View>
</ThemeContext.Provider>
);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
Обратите внимание, что я использую реагирующую навигацию 5.0, которая не поддерживает screenProps