Jetez un œil aux thèmes Shoutem pour React Native.
Voici ce que vous obtenez avec le thème Shoutem:
Style global où un certain style est automatiquement appliqué au composant par son nom de style:
const theme = {
'my.app.ComponentStyleName': {
backgroundColor: 'navy',
},
};
Activation de certains styles spécifiques aux composants avec styleName
(comme la classe CSS):
const theme = {
'my.app.ComponentStyleName': {
'.rounded': {
borderRadius: 20,
},
backgroundColor: 'navy',
},
};
// Implementation - will apply borderRadius to Component
<Component styleName="rounded"/>
Héritage de style automatique:
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>
Style imbriqué pour les composants composés:
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>
);
}
Pour que cela fonctionne, vous devez utiliser StyleProvider
le composant wrapper qui fournit du style à tous les autres composants via le contexte. Similaire à Redux StoreProvider
.
Vous devez également connecter votre composant au style avec connectStyle
afin de toujours utiliser le composant connecté. Similaire à Redux connect
.
export const styledComponent = connectStyle('my.app.ComponentStyleName',
{ ...defaultStyleIfAny })(Component);
Vous pouvez voir un exemple dans la documentation.
Une dernière chose, nous avons également fourni un ensemble de composants dans notre boîte à outils d'interface utilisateur qui sont déjà connectés au style, vous pouvez donc simplement les importer et les styliser dans votre style / thème global.