@keg-hub/re-theme
v10.1.0
Published
Simple Theme switcher / builder for React and React Native
Downloads
11
Readme
ReTheme
Tools for styling React or React Native components
Setup
- Add to your package.json
"re-theme": "git+https://github.com/keg-hub/re-theme"
- Wrap the entry point of your application with an instance of
ReThemeProvider
, e.g.:
import { ReThemeProvider } from 're-theme'
const myCustomTheme = {
// theme styles go here
}
export const App from Component {
state = { theme: myCustomTheme }
componentDidUpdate = () => {
this.props.theme !== this.state.theme &&
this.setState({ theme: this.props.theme })
}
render(){
return (
<ReThemeProvider theme={this.state.theme} merge={false}>
<App />
</ReThemeProvider>
)
}
}
ReThemeProvider
accepts two propstheme
: the theme object, containing any global styles you want to use across your appmerge
: a boolean indicating whether or not you want to merge the passed in theme prop with the current theme
reStyle
reStyle
is the preferred utility in ReTheme for styling your components
Usage
...
import { reStyle } from '@keg-hub/re-theme/reStyle'
// basic styling with an object
const StyledButton = reStyle(Button)({
position: 'absolute'
})
// using global theme
const StyledButton = reStyle(Button)(theme => ({
// reStyle also supports style aliases. View these aliases in src/constants/ruleHelpers.js
pos: 'absolute',
c: theme.colors.red
}))
// using theme and props
const StyledButton = reStyle(Button)((theme, props) => ({
position: 'absolute',
color: theme.colors.red
borderColor: props.outline || theme.colors.borderColor
})
// for styling components with any props, set the default props
const StyledIcon = reStyle(SomeSvgIcon)(
{ position: 'absolute' }
theme => ({
// these are default props passed to `SomeSvgIcon`, not style attributes
width: 32,
height: 32
className: 'some-class',
customProp: theme.customValue
})
)
/**
* For specifying a specific prop for styles, pass in a string for the 2nd argument.
* This is equivalent to:
* const styles = {
* main: { position: 'absolute' },
* content: { margin: 32 }
* }
* <Container styles={styles}>
*/
const StyledContainer = reStyle(Container, 'styles')({
main: {
position: 'absolute'
},
content: {
margin: 32
}
})
API
Checkout the Example App for documentation.