我正在尝试制作一个动态的主题,但我有一个问题。当我将React.context与提供者和消费者一起使用时,我的应用程序不会在屏幕上显示任何内容。
这是我的App.js
import React from 'react';
import Route from './route/Route';
import { ThemeProvider } from './reusables/theme/themeContext';
const AppContainer = createAppContainer(Route);
export default class App extends React.Component {
render() {
return (
<ThemeProvider>
<AppContainer/>
</ThemeProvider>
);
}
}--路由
import { createStackNavigator } from "react-navigation";
const BaseStack = createStackNavigator(
{
Overview: {
screen: OverviewScreen,
navigationOptions: { header: null, },
},
{
initialRouteName: 'Overview',
}
})
export default BaseStack;--提供程序类
import React, {Component} from 'react';
const ThemeContext = React.createContext({
themeColor: '#f45',
changeThemeColor: () => null,
});
export const ThemeConsumer = ThemeContext.Consumer;
export class ThemeProvider extends Component {
state = {
themeColor: '#f45',
}
changeThemeColor = (themeColor) => {
this.setState({ themeColor });
}
render() {
return (
<ThemeContext.Provider
value={{
themeColor: this.state.themeColor,
changeThemeColor: this.changeThemeColor,
}}>
{ this.props.children }
</ThemeContext.Provider>
)
}
}--子组件
import React, { Component } from 'react';
import { View, StatusBar, ScrollView, ToastAndroid } from 'react-native';
/* --- STYLES - COLORS ---*/
import gStyle from '../styles/Style.global';
import { ThemeConsumer } from '../reusables/theme/themeContext';
export default class OverviewScreen extends Component {
constructor(props) {
super(props);
this.state = {
}
}
render() {
return (
<ThemeConsumer>
{( themeColor ) => {
<View style={[{backgroundColor: themeColor}, gStyle.container]}>
<StatusBar hidden/>
{this.overviewPage()}
</View>
}}
</ThemeConsumer>
);
}当我尝试运行app时,屏幕是空白的。控制台中没有警告。我不知道如何解决这个问题。
发布于 2019-01-06 17:37:17
你的道具没有被传递给AppContainer:
export default class App extends React.Component {
render() {
return (
<ThemeProvider>
<AppContainer {...this.props} />
</ThemeProvider>
);
}
}发布于 2020-05-17 18:55:19
您不会从Context.Consumer返回任何内容
编辑:迟做总比不做好。
https://stackoverflow.com/questions/54057218
复制相似问题