Better styling for react-native
- 📦 Very light and simple;
- ⚡️ Hooks \ HoC support;
- 🔋 Theming support;
- ⛱️ Typescript support;
- 📝 Easy integrated with Jest.
- 🛡️ react-native-safe-area-view;
- 🗺 i18n;
- 🕳️ Appearance (a.k.a Dark mode);
- 📐 Dimensions;
- 📲 Orientation;
- 💉 Media Queries support.
react-native-stylex requires react-native 0.59.0 or later.
yarn add react-native-stylex
# or npm install react-native-stylexStylex provides component, which makes the theme available to the rest of your app:
import{ThemeProvider}from"react-native-stylex";import{createBreakpointsMatcher,createBreakpoints,maxWidth,}from"react-native-stylex/media-query";constbreakpoints={xs: 360,sm: 600,md: 960,lg: 1280,xl: 1920,};const{ up, down, only, between }=createBreakpoints(breakpoints);constapplyBreakpoints=createBreakpointsMatcher(breakpoints,maxWidth);consttheme={palette: {textColor: "black"},breakpoints: { up, down, only, between,apply: applyBreakpoints},utils: {fade: (color,value)=>{},},};constRoot=()=>(<ThemeProvidervalue={theme}><App/></ThemeProvider>);exportdefaultRoot;Stylex provides a helper function to inject styles to your component.
Normally, you’ll use it in this way:
import{makeUseStyles}from"react-native-stylex";import{maxWidth}from"react-native-stylex/media-query";exportconstuseStyles=makeUseStyles(({ palette, utils, breakpoints })=>({root: {color: utils.fade(palette.textColor,0.5),height: 100,// On screens that are 320 or less, set the height to 69
...maxWidth(320,{height: 69}),},text: {fontSize: 16,// default value
...breakpoints.down("lg",{fontSize: 18}),// if window width 0..1280
...breakpoints.down("sm",{fontSize: 20}),// if window width 0..600},// The same example that you see above but unsing a 'applyBreakpoints'title: {fontSize: breakpoints.apply({sm: 20,// if window width 0....600lg: 18,// if window width 601..1280default: 16,// if window width 1281...}),},}));And finally just use in component:
importReact,{Component}from"react";importuseStylesfrom"./styles";// Functional component (hooks variant)constRoot=()=>{conststyles=useStyles();return<Viewstyle={styles.root}/>;};exportdefaultRoot;//--------------------------------// Class component (HOC variant)classRootextendsComponent{render(){const{ styles }=this.props;return<Viewstyle={styles.root}/>;}}exportdefaultwithStyles(useStyles)(Root);- Look at typescript guide
