Взгляните на темы Shoutem для React Native.
Вот что вы получаете с Shoutem Theme:
Глобальный стиль, в котором определенный стиль автоматически применяется к компоненту по его имени:
const theme = {
'my.app.ComponentStyleName': {
backgroundColor: 'navy',
},
};
Активация определенного стиля компонента с помощью styleName(например, класса CSS):
const theme = {
'my.app.ComponentStyleName': {
'.rounded': {
borderRadius: 20,
},
backgroundColor: 'navy',
},
};
// Implementation - will apply borderRadius to Component
<Component styleName="rounded"/>
Автоматическое наследование стилей:
const theme = {
'my.app.ComponentStyleName': {
'my.app.ChildComponentStyleName': {
backgroundColor: 'red',
},
'.rounded': {
borderRadius: 20,
},
backgroundColor: 'navy',
},
};
// Implementation - will apply red background color to ChildComponent
<Component styleName="rounded">
<ChildComponent/>
</Component>
Вложенный стиль для составных компонентов:
const theme = {
'my.app.ComponentStyleName': {
containerView: {
paddingTop: 10,
},
innerView: {
backgroundColor: 'yellow',
},
},
};
// Of course do not forget to connect Component
function Component({ style }) {
return (
<View style={style.containerView}>
<View style={style.innerView}>
<Text>Warning with yellow background.</Text>
</View>
</View>
);
}
Чтобы заставить его работать, вам нужно использовать StyleProviderкомпонент-оболочку, который предоставляет стиль всем остальным компонентам через контекст. Похоже на Redux StoreProvider.
Также вам необходимо связать свой компонент со стилем, connectStyleчтобы вы всегда использовали связанный компонент. Подобно Redux connect.
export const styledComponent = connectStyle('my.app.ComponentStyleName',
{ ...defaultStyleIfAny })(Component);
Вы можете увидеть пример в документации.
И последнее: мы также предоставили набор компонентов в нашем UI ToolKit, которые уже связаны со стилем, поэтому вы можете просто импортировать их и стилизовать в своем глобальном стиле / теме.