Contactez-nous

Plugin ESLint pour les hooks (`eslint-plugin-react-hooks`)

Découvrez le plugin ESLint `eslint-plugin-react-hooks` et ses règles (rules-of-hooks, exhaustive-deps) pour garantir l'utilisation correcte des Hooks React.

Introduction : L'importance du Linting pour les Hooks

ESLint est un outil d'analyse de code statique (linter) extrêmement populaire dans l'écosystème JavaScript. Il permet de détecter automatiquement les erreurs potentielles, les problèmes de style de code et les anti-patterns directement dans votre éditeur ou lors d'un processus de vérification (par exemple, avant un commit ou en intégration continue).

Comme nous l'avons vu, l'utilisation correcte des Hooks React repose sur le respect de règles spécifiques (appel au niveau supérieur, appel depuis des fonctions React, exhaustivité des dépendances). Bien que ces règles soient cruciales, les erreurs humaines sont toujours possibles. Pour pallier cela et garantir la robustesse du code utilisant les Hooks, l'équipe React a développé et maintient un plugin ESLint officiel : eslint-plugin-react-hooks.

Ce plugin est devenu un outil indispensable pour tout projet React moderne utilisant les Hooks. Il analyse votre code et vous avertit immédiatement si vous enfreignez les règles fondamentales, vous aidant à prévenir des bugs avant même qu'ils ne se produisent.

Les deux règles clés du plugin

Le plugin eslint-plugin-react-hooks fournit principalement deux règles extrêmement utiles :

1. `react-hooks/rules-of-hooks`
  • Objectif : Appliquer les deux Règles fondamentales des Hooks.
  • Ce qu'elle vérifie :
    • Que les Hooks (commençant par `use`) sont appelés uniquement au niveau supérieur des composants fonctionnels ou d'autres Hooks personnalisés.
    • Qu'ils ne sont pas appelés à l'intérieur de conditions, de boucles, ou de fonctions imbriquées.
    • Qu'ils ne sont pas appelés depuis des composants de classe ou des fonctions JavaScript classiques.
  • Importance : Essentielle pour garantir la stabilité de l'ordre d'appel des Hooks, prévenant ainsi les erreurs liées à un état ou des effets mal associés.
2. `react-hooks/exhaustive-deps`
  • Objectif : Assurer que les tableaux de dépendances des Hooks comme useEffect, useCallback, useMemo, et useLayoutEffect sont corrects et complets.
  • Ce qu'elle vérifie : Que toutes les variables (props, state, fonctions définies dans le composant, etc.) utilisées à l'intérieur du callback du Hook et provenant de la portée externe sont bien incluses dans le tableau de dépendances.
  • Importance : Cruciale pour éviter les bugs liés aux closures obsolètes ("stale closures"), où le callback du Hook capture et utilise une ancienne valeur d'une variable parce que celle-ci n'a pas été déclarée comme dépendance. Cette règle aide à garantir que l'effet ou la valeur mémorisée se met bien à jour lorsque ses dépendances changent.
  • Fonctionnalité bonus : Cette règle est particulièrement utile car elle fournit souvent des suggestions automatiques pour corriger le tableau de dépendances directement dans l'éditeur.

Intégration et configuration

La plupart des outils modernes pour démarrer un projet React (comme Create React App ou les templates React de Vite) incluent et configurent eslint-plugin-react-hooks par défaut. Si vous configurez ESLint manuellement, vous devez installer le plugin :

npm install eslint-plugin-react-hooks --save-dev
# ou
yarn add eslint-plugin-react-hooks --dev

Ensuite, vous devez l'activer dans votre fichier de configuration ESLint (par exemple, .eslintrc.js ou .eslintrc.json). Une configuration typique ressemble à ceci :

{
  "plugins": [
    // ... autres plugins
    "react-hooks"
  ],
  "extends": [
    "eslint:recommended",
    "plugin:react/recommended",
    "plugin:react-hooks/recommended" // Recommandé: active les règles de base
  ],
  "rules": {
    // Optionnel: surcharger les règles si nécessaire
    // "react-hooks/rules-of-hooks": "error", // Déjà inclus dans 'recommended'
    // "react-hooks/exhaustive-deps": "warn" // Déjà inclus dans 'recommended' (souvent en 'warn' par défaut)
    // ... autres règles
  }
}

L'extension plugin:react-hooks/recommended est généralement le moyen le plus simple d'activer les deux règles avec des configurations par défaut raisonnables (souvent `error` pour `rules-of-hooks` et `warn` pour `exhaustive-deps`).

Bénéfices de l'utilisation du plugin

  • Prévention des bugs : Détecte les erreurs courantes liées aux Hooks avant qu'elles n'atteignent l'exécution.
  • Application des bonnes pratiques : Vous guide vers une utilisation correcte et idiomatique des Hooks.
  • Fiabilité accrue : Réduit le risque d'erreurs subtiles liées à l'ordre d'appel ou aux dépendances manquantes.
  • Retour immédiat : Fournit des avertissements ou des erreurs directement dans votre éditeur de code pendant que vous tapez.
  • Gain de temps : Evite de passer du temps à déboguer des problèmes qui auraient pu être détectés statiquement.
  • Aide à l'apprentissage : Pour les débutants, c'est un excellent outil pédagogique pour comprendre et intégrer les règles des Hooks.

Conclusion : Un gardien indispensable pour vos Hooks

Le plugin eslint-plugin-react-hooks n'est pas juste un outil de "qualité de code" optionnel ; il est fondamental pour travailler efficacement et en toute sécurité avec les Hooks React. En appliquant automatiquement les règles essentielles définies par l'équipe React, il agit comme un filet de sécurité, vous aidant à éviter les pièges courants et à construire des applications plus fiables.

Assurez-vous qu'il est actif et configuré correctement dans votre projet. Ecoutez ses avertissements et comprenez pourquoi ils sont signalés ; c'est l'un des meilleurs moyens de maîtriser l'utilisation correcte et robuste des Hooks en React.