Je suis tombé sur une chaudière ReactJS qui avait de bons représentants et est dirigée par la communauté. La section de style met davantage l'accent sur le style CSS des composants, mais n'a jamais cessé de passer aux méthodologies de style CSS conventionnelles. Bien que cela ait attiré mon intérêt, ce qui fait que le CSS Styled-Component se démarque et pourquoi faut-il l'adopter.
Ma compréhension de Composant stylisé CSS :
Mes questions sont:
Les navigateurs ont évolué pour analyser CSS séparément de l'analyse Javascript, pourquoi essayons-nous de nous en écarter et de les adapter à Javascript?
Le CSS à composant stylisé expédie sa bibliothèque javascript à l'extrémité cliente, qui analyse en fait les styles au moment de l'exécution et les place à l'intérieur de <style />
tag lorsque chaque composant se charge à la demande. Cela signifie une charge supplémentaire et une logique contribuant éventuellement aux cycles d'exécution sur le navigateur. Pourquoi en avoir besoin?
(Par la question ci-dessus, je veux dire que pour chaque composant, le CSS correspondant est calculé et créé et inséré dans head via style
tag/Plusieurs balises de style - Réinventer les interpréteurs CSS)
Est-ce que le texte de style calculé en continu frappe par <style />
dans la balise head provoque une refusion/repeinture du navigateur?
Quels sont les avantages en termes de performances que j'en retire?
Communauté, nettoyez l'air pour moi ou corrigez-moi si je me trompe.
Quelques bons articles qui parlent de repeindre ou de redistribuer DOM comment les performances sont coûteuses pour le navigateur lorsque les styles CSS sont modifiés.
Les navigateurs ont évolué pour analyser CSS séparément de l'analyse Javascript, pourquoi essayons-nous de nous en écarter et de les adapter à Javascript?
Lorsque vous mélangez Javascript et HTML (à savoir JSX) puis CSS (JSS ou autre), vous faites de votre composant un module solide qui tient dans un seul fichier. Vous n'avez plus besoin de conserver les styles dans un fichier séparé.
Ensuite, la magie fonctionnelle se produit: comme JSX est une fonction pure de données brutes qui retourne "HTML" (pas vraiment), de la même manière que CSS-in-JS est une fonction pure ou des données brutes qui retourne "CSS" (également pas vraiment ). À partir de ce point, je pense que cela vaut la peine lire sur JSX et également sur CSS-in-JS .
Le CSS à composant stylisé expédie sa bibliothèque javascript à l'extrémité cliente, qui analyse en fait les styles au moment de l'exécution et les place à l'intérieur de
<style />
tag lorsque chaque composant se charge à la demande. Cela signifie une charge supplémentaire et une logique contribuant éventuellement aux cycles d'exécution sur le navigateur.
Pas seulement sur l'exécution. Parce que CSS-in-JSS n'est qu'une fonction des données qui renvoient CSS, vous pouvez l'utiliser sur n'importe quelle plate-forme. Prenez Node, ajoutez SSR , et vous avez style
éléments livrés au navigateur dans le corps de la réponse, donc analysés comme cela se produirait dans le cas d'origine de la livraison CSS.
Pourquoi en avoir besoin?
Parce qu'il est pratique en développement, tout comme React ou Redux, tout comme jQuery, et comme toute autre bibliothèque, il a un coût de charge réseau et de performances du navigateur.
Vous prenez une bibliothèque car elle résout un problème. S'il ne semble pas y avoir de problème, pourquoi utiliser la bibliothèque, n'est-ce pas?
Est-ce que le texte de style calculé en continu frappe par
<style />
dans la balise head provoque une refusion/repeinture du navigateur?
Il y a tant de choses qui forcent la refusion .
Les navigateurs sont intelligents. Ils ne tentent même pas de repeindre si les styles n'ont pas changé. Ce qui ne veut pas dire qu'ils ne calculent pas la différence, ce qui coûte du temps CPU.
Il y a une bonne introduction à la portée et la complexité des (re) calculs de style , cela vaut vraiment la peine d'être lu pour comprendre le sujet plus en profondeur.
J'utilise SCSS
(SASS
) depuis de nombreuses années et j'utilise également Styled-Components
pour quelques projets, certains de grande envergure.
J'adore les deux, et Styled-Components
me semble être un pas en avant:
J'ai trouvé plus facile de travailler avec [~ # ~] css [~ # ~] dans le [ ~ # ~] jsx [~ # ~] fichier lui-même (j'étais contre cette idée pendant de nombreuses années)
Possibilité d'utiliser facilement des variables javascript dans les styles
Les inconvénients ne peuvent être vus comme tels que sur certains scénarios mais pas nécessairement tous.
SCSS/LESS les avantages peuvent être considérés comme opposés aux inconvénients énumérés ci-dessus, tout en ayant des inconvénients supplémentaires tels que les mélanges et un développement plus rapide lorsque vous travaillez avec des variables (IMHO ). il peut devenir "moche" en définissant une variable de sélection locale:
Comparez ces exemples simplifiés:
SCSS
exemple:.icon{
$size: '20px';
width: $size;
height: $size;
margin-left: $size/2;
}
Styled-Components
exemple de portée locale:const Icon = styled.i(props => {
const size = 20; // easier to use Number instead of String for calculations
return `
width: ${size}px;
height: ${size}px;
margin-left: ${size/2}px;
`});
Évidemment, la variable aurait pu être définie en dehors de l'encapsuleur de style Icon
puis utilisée en interne, mais cela ne la rendra pas isolée, car les composants CSS de style peuvent être composés de sous-composants de style et ressembler davantage à CSS :
const Header = styled.header`
> ul{
...
}
li{
...
}
img{...}
navigation{...}
`
Il n'est pas toujours souhaitable d'extraire chaque élément HTML individuel de son propre composant de style . cela se fait principalement pour les composants qui sont ou pourraient être répétés dans l'application.
En ce qui concerne les mélanges SASS, ils peuvent être convertis en fonctions javascript, donc il n'y a pas beaucoup d'avantages à SASS ici.
Dans l'ensemble, travailler avec des composants stylisés est amusant et facile, mais a pour effet secondaire un couplage plus étroit entre les styles et le cadre/composant et il a évidemment une certaine pénalité de performance (rien qui ne vous ralentira réellement, mais quand même) .