Better styling for react-native
react-native-stylex
Better styling for react-native.
Module features:
-
? Very light and simple;
-
⚡️ Hooks support;
-
? Theming support;
-
⛱️ Typescript support;
-
? Easy integrated with jest;
-
? CSS Media Queries syntax.
Install
react-native-stylex
requires react-native 0.59.0 or later.
1️⃣ Add module
yarn add react-native-stylex
# or npm install react-native-stylex
2️⃣ Add theme <ThemeProvider/>
Stylex provides component, which makes the theme available to the rest of your app:
import { ThemeProvider } from "react-native-stylex";
const theme = {
palette: { textColor: "black" },
utils: { fade: (color, value) => {} }
};
const Root = () => (
<ThemeProvider value={theme}>
<App />
</ThemeProvider>
);
export default Root;
3️⃣ Create styles makeUseStyles(...)
Stylex provides a helper function to inject styles to your component.
Normally, you’ll use it in this way:
import { makeUseStyles, maxWidth } from "react-native-stylex";
const useStyles = makeUseStyles(({ palette, utils }) => ({
root: {
color: utils.fade(palette.text.textColor, 0.5),
height: 100,
// On screens that are 320 or less, set the height to 69
...maxWidth(320, { height: 69 })
},
// Another syntax, `.row` property would be `null` or passed object
point: maxWidth(320, { height: 4, width: 4 })
}));
export default useStyles;
4️⃣ Inject styles useStyles(...)
& withStyles(...)
And finally just use in component:
import React, { Component } from "react";
import useStyles from "./styles";
// Functional component (hooks variant)
const Root = () => {
const styles = useStyles();
return <View style={styles.root} />;
};
export default Root;
//--------------------------------
// Class component (HOC variant)
class Root extends Component {
render() {
const { styles } = this.props;
return <View style={styles.row} />;
}
}
export default withStyles(useStyles)(Root);