Взгляните на темы 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, которые уже связаны со стилем, поэтому вы можете просто импортировать их и стилизовать в своем глобальном стиле / теме.