функция доступа в приложении с использованием React context API - PullRequest
0 голосов
/ 09 марта 2020

Я создаю приложение с выбором тем, я понял, что допустил некоторые ошибки, но я продолжу этот путь, я хотел бы знать, возможно ли получить доступ к этой функции 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...