Construire dynamiquement des noms de classe dans TailwindCss
P粉147747637
2023-08-24 10:11:17
<p>Je suis actuellement en train de créer une bibliothèque de composants à l'aide de TailwindCss pour mon prochain projet et je viens de rencontrer un petit problème avec le composant Button. </p>
<p>J'ai passé des accessoires comme <code>'primary'</code> ou <code>'secondary'</code> qui fonctionnent de la même manière que ce que j'ai fait dans <code>tailwind.config. js</code>, puis je souhaite l'attribuer au composant bouton en utilisant <code>Template Lites</code> comme ceci : <code>bg-${color}-500</ code></p>. ;
<pre class="brush:php;toolbar:false;"><bouton
nom de classe={`
w-40 arrondi-lg p-3 m-2 police-gras transition-toute durée-100 bordure-2 actif:échelle-[0,98]
bg-${couleur}-500 `}
onClick={onClick}
type="bouton"
tabIndex={0}
>
{enfants}
</bouton></pre>
<p>Le nom de la classe s'affiche correctement dans le navigateur, il affiche <code>bg-primary-500</code> dans le DOM, mais pas dans l'onglet Styles appliqués. </p>
<p>La configuration du thème est la suivante :</p>
<pre class="brush:php;toolbar:false;">thème : {
étendre: {
couleurs: {
primaire: {
500 : '#B76B3F',
},
secondaire : {
500 : '#344055',
},
},
},
},</pré>
<p>Mais cela n’applique aucun style. Si j'ajoute simplement <code>bg-primary-500</code> </p>
<p>Honnêtement, je me demande simplement si c'est parce que le compilateur JIT ne récupère pas les noms de classe dynamiques, ou si je fais quelque chose de mal (ou si ce n'est pas la façon d'utiliser tailWind). </p>
<p>Toute aide est la bienvenue, merci d'avance ! </p>
Il n'est pas recommandé d'écrire les classes CSS Tailwind de cette manière. Même le mode JIT n'est pas pris en charge , pour citer la documentation CSS de Tailwind : "Tailwind n'inclut aucun type d'exécution client, donc les noms de classe doivent être extraits statiquement au moment de la construction et ne peuvent pas être fiables dans le client "
Donc, après avoir découvert que cette façon de travailler est obsolète et que le JIT ne la prend pas en charge (merci au généreux commentateur). J'ai changé l'approche pour une approche plus basée sur la « configuration ».
En gros, je définis un const avec une configuration de base de différents accessoires et je les applique au composant. Cela nécessite plus d’entretien, mais le travail est fait.
Ceci est un exemple de configuration. (aucune saisie n'est requise pour l'instant) et une meilleure refactorisation, mais vous aurez l'idée.
Ensuite j'applique le style comme ceci :