Construire dynamiquement des noms de classe dans TailwindCss
P粉147747637
P粉147747637 2023-08-24 10:11:17
0
2
579
<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>
P粉147747637
P粉147747637

répondre à tous(2)
P粉034571623

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 "

P粉530519234

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.

const buttonConfig = {
  // Colors
  primary: {
    bgColor: 'bg-primary-500',
    color: 'text-white',
    outline:
      'border-primary-500 text-primary-500 bg-opacity-0 hover:bg-opacity-10',
  },
  secondary: {
    bgColor: 'bg-secondary-500',
    color: 'text-white',
    outline:
      'border-secondary-500 text-secondary-500 bg-opacity-0 hover:bg-opacity-10',
  },

  // Sizes
  small: 'px-3 py-2',
  medium: 'px-4 py-2',
  large: 'px-5 py-2',
};

Ensuite j'applique le style comme ceci :

<motion.button
    whileTap={{ scale: 0.98 }}
    className={`
    rounded-lg font-bold transition-all duration-100 border-2 focus:outline-none
    ${buttonConfig[size]}
    ${outlined && buttonConfig[color].outline}
    ${buttonConfig[color].bgColor} ${buttonConfig[color].color}`}
    onClick={onClick}
    type="button"
    tabIndex={0}
  >
    {children}
  </motion.button>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal