Passer au contenu principal

React

Composants fonctionnels uniquement

Utilisez toujours des composants fonctionnels TSX avec des exports nommés.

Propriétés

Créez un type nommé {ComponentName}Props. Utilisez la déstructuration. N’utilisez pas React.FC.

Pas de propagation de props à partir d’une seule variable

Gestion de l’état

Atomes Jotai pour l’état global

  • Préférez les atomes au prop drilling
  • N’utilisez pas useRef pour l’état — utilisez useState ou des atomes
  • Utilisez les familles d’atomes et les sélecteurs pour les listes

Évitez les re-renders inutiles

  • Extrayez useEffect et la récupération de données dans des composants sidecar frères
  • Préférez les gestionnaires d’événements (handleClick, handleChange) à useEffect
  • N’utilisez pas React.memo() — corrigez plutôt la cause première
  • Limitez l’utilisation de useCallback ou useMemo

TypeScript

  • type plutôt que interface — plus flexible, plus facile à composer
  • Littéraux de chaîne plutôt que enums — sauf pour les enums générés par GraphQL codegen et les API internes des bibliothèques
  • Pas de any — TypeScript strict appliqué
  • Pas d’importations de types — utilisez des importations classiques (imposées par Oxlint typescript/consistent-type-imports)
  • Utilisez Zod pour la validation à l’exécution des objets non typés

JavaScript

Nommage

  • Variables: camelCase, explicites (email et non value, fieldMetadata et non fm)
  • Constantes: SCREAMING_SNAKE_CASE
  • Types/Classes: PascalCase
  • Fichiers/répertoires: kebab-case (.component.tsx, .service.ts, .entity.ts)
  • Gestionnaires d’événements: handleClick (pas onClick pour la fonction gestionnaire)
  • Props de composant: préfixez avec le nom du composant (ButtonProps)
  • Composants stylés: préfixez avec Styled (StyledTitle)

Stylisation

Utilisez les composants stylés Linaria. Utilisez les valeurs du thème — évitez les px, rem ou couleurs en dur.

Imports

Utilisez des alias au lieu de chemins relatifs:

Structure des dossiers

  • Les modules peuvent importer depuis d’autres modules, mais ui/ doit rester sans dépendances
  • Utilisez des sous-dossiers internal/ pour le code privé au module
  • Composants de moins de 300 lignes, services de moins de 500 lignes