essayant de porter du code de jss vers des composants de style, le code jss ressemble à ceci:
//...
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>
)
}
ma question est quelle serait la manière idiomatique d'accomplir ce partage des mêmes styles sur plusieurs composants?
Vous pouvez partager des chaînes CSS réelles ou partager styled-components
Composants:
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 */
`
Mise à jour: Sur la base des questions dans les commentaires, j'ai créé un exemple pour montrer que le passage d'accessoires à la fonction css
des composants de style fonctionne de la même manière que le passage d'accessoires aux composants eux-mêmes: https: // codesandbox .io/s/2488xq91qj? fontsize = 14 . La recommandation officielle de styled-components
est de toujours envelopper les chaînes que vous passerez à styled-components
dans la fonction de balise css
. Dans cet exemple, le composant Test
reçoit ses couleurs d'arrière-plan et de premier plan via des accessoires passés intégrés dans la variable cssString
créée en appelant la fonction css
.
En plus de la réponse publiée, vous pouvez également créer une fonction qui accepte props
/theme
et renvoie le css``
.
styled-components
vérifiera le type de la valeur fournie, par exemple: ${shared}
et si c'est un function
il l'invoquera avec le props
/theme
correspondant.
import styled, {css} from 'styled-components';
const shared = ({theme, myProp}) => css`
color: theme.color
`
/* ------------ */
const Component1 = styled.div`
${shared};
/* more styles ... */
`
const Component2 = styled.div`
${shared};
/* more styles ... */
`