react-with-styles is one of the CSS-in-JS libraries. You can modify document's style in js files and most of the times it'd be inside Component if you chose to use React. Inside of it's related to HOC(Higher-Ordered Components).
- install react-with-styles
> yarn add react-with-styles aphrodiete react-with-styles-interface-aphrodite
You should install not only install react-with-styles but also aphrodite. aphrodite helps you to render on server-side. JS Engline would start working with CSS(in js files) only after DOM drawing is finished. There're some delays to be done with CSS painting and that's when aphrodite plays a role.
- withStyles.js
import ThemedStyleSheet from 'react-with-styles/lib/ThemedStyleSheet'; import aphroditeInterface from 'react-with-styles-interface-aphrodite'; import { css, withStyles, withStylesPropTypes } from 'react-with-styles'; import Theme from './Theme'; ThemedStyleSheet.registerTheme(Theme); ThemedStyleSheet.registerInterface(aphroditeInterface); export { css, withStyles, withStylesPropTypes, ThemedStyleSheet }; export default withStyles;
- register
Theme
and export associated modules.Theme
'll be applied toComponent
if you wrap it withwithStyles()
and give style usingcss()
.
- Theme.js
export default { color: { ... default: '#999999', }, size: { ... md: 14, ... }, ... };
- Create 'Theme.js' file and export an object. The object should include property values commonly shown in the project overall.
import react, {Component} from 'React' import withStyles, { css } from './withStyles'; class StyledComp extends Component { const { styles } = this.props; render(){ return (<div ...css(styles.default)></div>) } withStyles(({ color, size }) => ({ default: { color: color.default, fontSize: size.md, }, }))(StyledComp);
- withStyles() creates a
function
which takes Component as input and gives Component (with{default: ...}
props) as output. Higher-Ordered Component is what takesWrappedComponent
, modify its behavior(add lifecycle method, log its output, conditonally render, attach/detach eventListener and etc...) and returns modified Component.
Top comments (0)