trying to port some code from jss to styled-components, jss code looks something like:
//... const styles = { myStyles: { color: 'green' } } const {classes} = jss.createStyleSheet(styles).attach() export default function(props) { return ( <div> <Widget1 className={classes.myStyles}/> <Widget2 className={classes.myStyles}/> </div> ) }
my question is what would be the idiomatic way to accomplish this sharing of the same styles across multiple components?
Who uses styled-components? 329 companies reportedly use styled-components in their tech stacks, including Revolut, Graphy, and Shelf.
The biggest advantage of Emotion is its easily handled object styles for writing CSS. Take, for example, the case of styled-components, wherein the developer must create unique names for different components, all while avoiding identical naming styles.
Advantages of using Styled-components Below are some of benefits of using styled-components: Eliminates class name bugs: styled-components provide unique class names for your styles, thus eliminating the problems with class names duplications, misspellings, and overlaps.
You can either share actual CSS strings or share styled-components
components:
import {css} from 'styled-components' const sharedStyle = css` color: green ` // then later const ComponentOne = styled.div` ${sharedStyle} /* some non-shared styles */ ` const ComponentTwo = styled.div` ${sharedStyle} /* some non-shared styles */ `
styled-components
:const Shared = styled.div` color: green; ` // ... then later const ComponentOne = styled(Shared)` /* some non-shared styles */ ` const ComponentTwo = styled(Shared)` /* some non-shared styles */ `
Update: Based on questions in the comments, I created an example to show that passing props to styled-components's css
function works the same way as passing props to the components themselves: https://codesandbox.io/s/2488xq91qj?fontsize=14. The official recommendation from styled-components
is to always wrap strings you will pass to styled-components
in the css
tag function. In this example, the Test
component receives it background and foreground colors through passed-in props embedded in the cssString
variable created by invoking the css
function.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With