0Pricing
React Academy · Leçon

Refactoriser un HOC en hook personnalisé

Convertissez progressivement un HOC withAuth en hook useAuth.

Refactoriser un HOC en hook personnalisé est une leçon React Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage React Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours React Academy comprend 4 leçons au total.

Bienvenue

Dans cette leçon, vous refactoriserez progressivement un HOC withAuth en crochet personnalisé useAuth et verrez précisément pourquoi la version utilisant un crochet est plus propre et plus facile à tester.

Le HOC withAuth (point de départ)

Le HOC reçoit un composant, vérifie si l’utilisateur est authentifié et le redirige vers /login dans le cas contraire. Il injecte l’utilisateur comme propriété.
function withAuth(Component) {
  return function AuthGuard(props) {
    const { user, loading } = useAuthState();
    if (loading) return <Spinner />;
    if (!user) return <Navigate to="/login" />;
    return <Component {...props} user={user} />;
  };
}

const ProtectedPage = withAuth(MyPage);

Problèmes du HOC

Le HOC : (1) ajoute une enveloppe dans DevTools, (2) injecte implicitement la propriété `user` — le composant doit savoir qu’il doit l’attendre, (3) est difficile à tester sans effectuer le rendu de l’enveloppe HOC complète, (4) se compose difficilement avec d’autres crochets.

Étape 1 : extraire la logique dans un crochet

Déplacez toute la logique du HOC dans un crochet personnalisé. Le crochet renvoie directement l’état d’authentification : aucun enveloppement ni aucune injection de propriété.
function useAuth() {
  const { user, loading } = useAuthState();
  return { user, loading, isAuthenticated: !!user };
}

Étape 2 : gérer les redirections dans le crochet

Déplacez la logique de redirection dans un crochet distinct (par exemple useRequireAuth) qui appelle navigate en interne et renvoie l’utilisateur.
function useRequireAuth(redirectTo = '/login') {
  const { user, loading } = useAuth();
  const navigate = useNavigate();

  useEffect(() => {
    if (!loading && !user) navigate(redirectTo);
  }, [user, loading, navigate, redirectTo]);

  return { user, loading };
}

Étape 3 : mettre à jour le composant

Remplacez l’enveloppe HOC par un appel direct au crochet dans le composant. Le composant appelle explicitement useRequireAuth et gère le chargement. Sa dépendance est désormais visible.
function MyPage() {
  const { user, loading } = useRequireAuth();
  if (loading) return <Spinner />;
  return <p>Hello, {user.name}</p>;
}

Comparaison des avantages

La version utilisant un crochet : (1) n’ajoute aucune enveloppe dans DevTools, (2) possède une dépendance explicite — vous voyez `useRequireAuth` dans le composant, (3) peut être testée en simulant le crochet, (4) se compose avec d’autres crochets dans le même composant.

Tester la version utilisant un crochet

Simulez useRequireAuth dans votre test en remplaçant l’export de son module. Le test du composant doit seulement effectuer le rendu du composant et vérifier le rendu obtenu : aucune configuration de HOC n’est nécessaire.
vi.mock('./useRequireAuth', () => ({
  useRequireAuth: () => ({ user: mockUser, loading: false })
}));

render(<MyPage />);
expect(screen.getByText('Hello, Alice')).toBeInTheDocument();

Quand conserver un HOC

Conservez le HOC si vous devez protéger de nombreux composants de manière déclarative (par exemple dans des définitions de routes) et ne souhaitez pas ajouter l’appel au crochet dans chacun d’eux. Vous pouvez même construire le HOC au-dessus du crochet.
function withAuth(Component) {
  return function (props) {
    const { user, loading } = useRequireAuth();
    if (loading) return <Spinner />;
    return <Component {...props} user={user} />;
  };
}

Le meilleur des deux approches

L’architecture finale : un crochet useRequireAuth utilisable directement dans les composants, AND un HOC withAuth léger construit au-dessus pour protéger les routes de manière déclarative. Les deux partagent la même logique de crochet.

Vérification rapide

Quel est le principal avantage d’appeler useRequireAuth dans un composant plutôt que de l’envelopper avec un HOC withAuth ?

Récapitulatif

Refactorisez les HOC en crochets en extrayant la logique dans un crochet personnalisé, en déplaçant les effets secondaires (comme les redirections) dans le crochet et en appelant directement le crochet dans le composant. Construisez un HOC léger au-dessus du crochet lorsqu’un enveloppement déclaratif est nécessaire.

Cours terminé

Félicitations ! Vous avez terminé **Modèles React : propriétés de rendu et HOC**. Vous comprenez maintenant ces deux modèles classiques, leurs compromis et la manière de les refactoriser en crochets personnalisés modernes.

Questions Fréquemment Posées

La leçon « Refactoriser un HOC en hook personnalisé » est-elle gratuite ?

Oui — le texte complet de « Refactoriser un HOC en hook personnalisé » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours React Academy, passe à CoddyKit PRO. Le cours React Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Refactoriser un HOC en hook personnalisé » ?

Convertissez progressivement un HOC withAuth en hook useAuth. Tu pratiques React Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer React Academy ?

Aucune expérience préalable n'est requise. React Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Refactoriser un HOC en hook personnalisé » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon React Academy ?

Oui. Chaque leçon React Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Modèle des propriétés de rendu
  2. Composants d’ordre supérieur (HOC) expliqués
  3. HOC, propriétés de rendu ou hooks personnalisés
  4. Refactoriser un HOC en hook personnalisé
← Retour à React Academy