I'm trying to add themes to react-native application and somehow it just doesn't work. Help please.
I have an Context:
import * as React from 'react';
export const VBContext = React.createContext({});
export default VBContext;
Then I have a custom provider which I use:
import * as React from 'react';
import { VBContext } from './Context';
class Vbcrider extends React.Component<any, any> {
constructor(props) {
super(props)
const { style } = props
this.state = {
style
}
}
render() {
const { children } = this.props;
const Context = VBContext;
return (
<Context.Provider value={this.state.style}>
{children}
</Context.Provider>
);
}
}
export default Vbcrider;
I also have a HOC, which should give this context to other components:
import * as React from 'react';
import { VBContext } from './Context';
function withStyle(WrappedComponent) {
return class extends React.Component<any, any> {
render() {
const Context = VBContext;
return (
<Context.Consumer>
{
() => <WrappedComponent {...this.props} />
}
</Context.Consumer>
);
}
};
}
export default withStyle;
And a button, where I use a HOC mentioned above:
@withStyle
class Button extends React.Component<any, any> {
style () {
const {
type,
theme
} = this.props;
return {
//some logic based on theme
}
}
render () {
const {
onPress,
children
} = this.props;
return (
<TouchableOpacity style={this.style()} onPress={() => onPress}>
{children}
</TouchableOpacity>
)
}
}
But in button and in HOC context is just empty object. Can't understand why. Any help is appreciated.
<Vbcrider style={{
primaryBackgroundColor: '#0000FF',
primaryBorderColor: '#0000CF',
warningBackgroundColor: '#FFA500',
warningBorderColor: '#FF8C00'
}}>
<App
rootReducers={rootReducers}
initialState={{}}
Navigator={RootPageNavigator}
/>
</Vbcrider>