Fermer

mai 25, 2020

Construire des composants React réutilisables en utilisant Tailwind


À propos de l'auteur

Tilo Mitra a étudié le génie à l'Université de Waterloo. Il est directeur d'ingénierie et ingénieur logiciel. Il écrit en JavaScript…
En savoir plus sur
Tilo

Tailwind est un framework CSS très utile qui fournit des noms de classe de bas niveau aux développeurs Web. Il n'a pas de JavaScript et fonctionne bien avec les frameworks existants tels que React, Vue, Angular, Ember et autres. Bien que cela soit positif, il peut être déroutant pour les nouveaux développeurs de comprendre comment intégrer Tailwind dans leurs applications. Dans cet article, nous explorerons des façons de créer des composants React réutilisables à l'aide de Tailwind.

Dans cet article, nous verrons plusieurs façons différentes de créer des composants React réutilisables qui exploitent Tailwind sous le capot tout en exposant une interface agréable à d'autres composants. Cela améliorera votre code en passant de longues listes de noms de classe à des accessoires sémantiques plus faciles à lire et à maintenir.

Vous devrez avoir travaillé avec React afin d'avoir une bonne compréhension de ce message.

Tailwind est un framework CSS très populaire qui fournit des classes utilitaires de bas niveau pour aider les développeurs à créer des conceptions personnalisées. Il a gagné en popularité au cours des dernières années, car il résout très bien deux problèmes:

  1. Tailwind facilite la modification itérative du code HTML sans parcourir les feuilles de style pour trouver des sélecteurs CSS correspondants.
  2. Tailwind a des conventions et des valeurs par défaut saines. Cela permet aux gens de commencer facilement sans écrire CSS à partir de zéro.

Ajoutez la documentation complète et il n'est pas surprenant que Tailwind soit si populaire.

Ces méthodes vous aideront à transformer du code qui ressemble à ceci:


Pour un code qui ressemble à ceci:


La différence entre les deux extraits est que dans le premier, nous avons utilisé une balise de bouton HTML standard, tandis que le second a utilisé un composant // C'est React plus conventionnel.

Voyons comment séparer les classes Tailwind pour que les utilisateurs de ce composant     ) }; bouton d'exportation par défaut;

Dans le code ci-dessus, nous définissons un composant Button qui prend les accessoires suivants:

  • size
    Définit la taille du bouton et applique les classes Tailwind text-xs ou text-xl
  • bgColor
    Définit la couleur d'arrière-plan du bouton et applique les classes Tailwind bg - * .
  • textColor
    Définit la couleur du texte du bouton et applique les classes text- * Tailwind .
  • enfants
    Tous les sous-composants seront passés ici. Il contiendra généralement le texte dans

En définissant Button.jsx nous pouvons maintenant l'importer et utiliser des accessoires React au lieu des noms de classe. Cela rend notre code plus facile à lire et à réutiliser.

 import Button from './Button';

Utilisation des noms de classe pour les composants interactifs

Un bouton est un cas d'utilisation très simple. Et quelque chose de plus compliqué? Eh bien, vous pouvez aller plus loin pour créer des composants interactifs.

Par exemple, regardons une liste déroulante réalisée à l'aide de Tailwind.


Une liste déroulante interactive construite à l'aide de Tailwind et du changement de nom de classe.

Pour cet exemple, nous créons le composant HTML à l'aide des noms de classe CSS Tailwind mais nous exposons un composant React qui ressemble à ceci:

  {
    console.log ("Option sélectionnée", option)}
  }
/>

En regardant le code ci-dessus, vous remarquerez que nous n'avons pas de classes Tailwind. Ils sont tous cachés dans le code d'implémentation de . L'utilisateur de ce composant Dropdown n'a qu'à fournir une liste d'options et un gestionnaire de clics, onOptionSelect quand une option est cliquée.

Voyons comment ce composant peut être construit à l'aide de Tailwind.

Suppression d'une partie du code non lié, voici l'essentiel de la logique. Vous pouvez voir ce Codepen pour un exemple complet.

 import classNames from 'classnames';

fonction Dropdown ({options, onOptionSelect}) {

  // Gardez une trace si la liste déroulante est ouverte ou non.
  const [isActive, setActive] = useState (false);
  
  const buttonClasses = `inline-flex justification-centre w-full arrondi-md border border-grey-300 px-4 py-2 bg-white text-sm Leading-5 font-medium text-grey-700 hover: text-grey -500 focus: contour-aucun focus: bordure-bleu-300 focus: ombre-contour-bleu actif: bg-bleu-500 actif: texte-gris-200 transition facilité-in-out durée-150`;

  revenir (
    // Bascule la liste déroulante si le bouton est cliqué
    
    // Utilisez le module classnames pour basculer les classes Tailwind .block et .hidden
    
    // Les éléments de liste sont rendus ici.     {options.map ((option) =>
onOptionSelect (option)}> {option}
)}    
  ) } exporter la liste déroulante par défaut;

La liste déroulante est rendue interactive en la montrant ou en la masquant de manière sélective à l'aide des classes .hidden et .block . Chaque fois que le   ) } bouton d'exportation par défaut;

Nous utilisons les constantes ButtonType et ButtonSize pour créer une liste de noms de classe. Cela rend l'interface de notre

Par rapport à l'approche précédente:

 // Exposition des noms de classe

Si vous devez redéfinir l'apparence des boutons dans votre application, modifiez simplement le fichier theme.js et tous les boutons de votre application seront automatiquement mis à jour. Cela peut être plus facile que de rechercher des noms de classe dans divers composants.

Méthode 3: Composer des utilitaires avec @apply

Une troisième façon d'améliorer la lisibilité de vos composants React consiste à utiliser CSS et le @apply modèle disponible dans PostCSS pour extraire des classes répétées. Ce modèle implique l'utilisation de feuilles de style et de post-processeurs.

Voyons comment cela fonctionne à travers un exemple. Supposons que vous ayez un groupe de boutons qui a un bouton principal et un bouton secondaire.

 Un groupe de boutons composé d'un bouton principal et secondaire
Un groupe de boutons composé d'un bouton principal et secondaire. ( Grand aperçu )



En utilisant le modèle @apply vous pouvez écrire ce code HTML comme:



Qui peut ensuite être adopté pour React pour devenir:

 importez des noms de classe à partir de "noms de classe";

Bouton de fonction ({taille, type, enfants}) {
  const bSize = "btn-" + taille;
  const bType = "btn-" + type;
  revenir (
    
  )
}

Button.propTypes = {
  taille: PropTypes.oneOf (['xs, xl']),
  type: PropTypes.oneOf (['primary', 'secondary'])
};


// Utilisation du composant Button.


Voici comment créer ces noms de classe de style BEM tels que .btn .btn-primary etc. Commencez par créer un fichier button.css :

 /  * button.css  * /
@tailwind base;
@tailwind components;

.btn {
  @apply py-2 px-4 mr-4 police-bold arrondie;
}
.btn-primary {
  @apply bg-blue-500 hover: bg-blue-700 text-white;
}
.btn-secondaire {
  @apply hover: bg-gray-700 text-grey-700 border-grey-300 border;
}
.btn-xs {
  @apply text-xs;
}
.btn-xl {
  @apply text-xl;
}

@tailwind utilities;

Le code ci-dessus n'est pas réel CSS mais il sera compilé par PostCSS . Il y a un référentiel GitHub disponible ici qui montre comment configurer PostCSS et Tailwind pour un projet JavaScript.

Il y a aussi une courte vidéo qui montre comment le configurer ici . [19659092] Inconvénients de l'utilisation de @apply

Le concept d'extraction de classes utilitaires Tailwind dans des classes CSS de niveau supérieur semble logique, mais il présente certains inconvénients dont vous devez être conscient. Soulignons-les avec un autre exemple.

Premièrement, en extrayant ces noms de classe, nous perdons des informations. Par exemple, nous devons être conscients que .btn-primary doit être ajouté à un composant auquel .btn a déjà été appliqué. En outre, .btn-primaire et .btn-secondaire ne peuvent pas être appliqués ensemble. Cette information n'est pas évidente en regardant simplement les classes.

Si cette composante était quelque chose de plus compliqué, vous auriez également besoin de comprendre la relation parent-enfant entre les classes. D'une certaine manière, c'est le problème que Tailwind a été conçu pour résoudre et en utilisant @apply nous rapportons les problèmes d'une manière différente.

Voici une vidéo Adam Wathan – le créateur de Tailwind – plonge dans les avantages et les inconvénients de l'utilisation @apply .

Résumé

Dans cet article, nous avons examiné trois façons dont vous pouvez intégrer Tailwind dans une application React pour créer des composants réutilisables. Ces méthodes vous aident à créer des composants React qui ont une interface plus propre à l'aide des accessoires .

  1. Utilisez le module classnames pour basculer par programme entre les classes.
  2. Définissez un fichier de constantes dans lequel vous définissez une liste de classes par état de composant.
  3. Utilisez @apply pour extraire des classes CSS de niveau supérieur.

Si vous avez des questions, envoyez-moi un message sur Twitter à @tilomitra .

Lecture recommandée sur SmashingMag:

 Editorial fracassant (ks, ra, il)






Source link

Revenir vers le haut