0Pricing
React Academy · Leçon

Modèle des sélecteurs de contexte

Implémentez un hook sélecteur simple qui ne déclenche un nouveau rendu que lorsqu’une partie du contexte change.

Modèle des sélecteurs de contexte est une leçon React Academy gratuite sur CoddyKit. Ceci est la leçon 3 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 allez implémenter un hook de sélection de contexte qui abonne un composant à une seule partie de l’état du contexte, afin d’empêcher les nouveaux rendus lorsque des parties sans rapport changent.

Le problème de la sélection

useContext effectue un nouveau rendu lorsqu’une partie ANY du contexte change. Si un composant a uniquement besoin du nom de l’utilisateur, mais que le contexte contient également une liste de notifications, l’ajout d’une notification recrée inutilement le composant qui affiche le nom.

Qu’est-ce qu’un sélecteur ?

Un sélecteur est une fonction qui extrait une partie précise de l’état depuis un objet d’état plus volumineux : `state => state.user.name`. Un hook de sélection s’abonne au contexte, mais ne déclenche un nouveau rendu que lorsque la valeur sélectionnée change.

Hook de sélection simple

Créez un hook useSelector qui lit le contexte et l’encapsule dans useMemo en fonction du résultat du sélecteur. Le composant n’effectue un nouveau rendu que lorsque la valeur sélectionnée change.
function useAppSelector(selector) {
  const state = useContext(AppCtx);
  return useMemo(() => selector(state), [state, selector]);
}

// Consumer only re-renders when user.name changes
const name = useAppSelector(s => s.user.name);

Vérification de l’égalité superficielle

Même avec useMemo et un sélecteur, un nouveau rendu a lieu si le sélecteur renvoie une nouvelle référence d’objet ou de tableau à chaque appel, par exemple `s => s.items.filter(...)`. Utilisez une comparaison d’égalité superficielle pour éviter les nouveaux rendus lorsque le contenu est identique.
import { useRef } from 'react';

function useSelector(selector) {
  const state = useContext(AppCtx);
  const selected = selector(state);
  const ref = useRef(selected);
  if (!shallowEqual(ref.current, selected)) {
    ref.current = selected;
  }
  return ref.current;
}

Bibliothèque use-context-selector

Pour une utilisation en production, la bibliothèque **use-context-selector** fournit un hook `useContextSelector` doté d’un abonnement et de vérifications d’égalité efficaces, sans nécessiter de gestionnaire d’état externe.
import { useContextSelector } from 'use-context-selector';

const name = useContextSelector(AppCtx, s => s.user.name);

Zustand comme solution native pour les sélecteurs

Le hook `useStore(selector)` de Zustand prend nativement en charge les sélecteurs et l’égalité superficielle, ce qui en fait un choix naturel pour les grands arbres d’état où des abonnements précis sont importants.
const name = useAppStore(state => state.user.name);

Quand les sélecteurs sont excessifs

Si les mises à jour du contexte sont peu fréquentes et que les consommateurs sont peu coûteux à recréer, les sélecteurs ajoutent de la complexité sans bénéfice mesurable. Analysez d’abord les performances : optimisez toujours en vous fondant sur des faits.

Mémoriser les fonctions de sélection

Si vous créez le sélecteur directement dans le corps du composant, une nouvelle référence de fonction est générée à chaque rendu, ce qui peut perturber la mémorisation. Définissez les sélecteurs en dehors du composant ou utilisez useCallback.
// Outside component — stable reference
const selectName = s => s.user.name;

function Profile() {
  const name = useAppSelector(selectName);
  return <p>{name}</p>;
}

Sélecteurs dérivés

Composez les sélecteurs en appelant l’un depuis l’autre. Les sélecteurs dérivés calculent des valeurs à partir de sélecteurs de base, ce qui permet de garder la logique métier en dehors des composants.
const selectFullName = s => s.user.firstName + ' ' + s.user.lastName;

Vérification rapide

Pourquoi les fonctions de sélection doivent-elles être définies en dehors du corps du composant lorsqu’elles sont utilisées avec useContextSelector ou useMemo ?

Récapitulatif

Les sélecteurs extraient une partie de l’état du contexte et empêchent les nouveaux rendus lorsque des parties sans rapport changent. Définissez les sélecteurs en dehors des composants pour obtenir des références stables. Utilisez use-context-selector ou Zustand pour bénéficier d’une prise en charge des sélecteurs adaptée à la production.

Suite du cours

Leçon suivante : **Quand ne pas utiliser Context** — vous apprendrez à reconnaître les situations où le passage de propriétés, la composition ou un gestionnaire d’état convient mieux que Context et offre une solution plus simple.

Questions Fréquemment Posées

La leçon « Modèle des sélecteurs de contexte » est-elle gratuite ?

Oui — le texte complet de « Modèle des sélecteurs de contexte » 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 « Modèle des sélecteurs de contexte » ?

Implémentez un hook sélecteur simple qui ne déclenche un nouveau rendu que lorsqu’une partie du contexte change. 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 3 sur 4.

Combien de temps prend la leçon « Modèle des sélecteurs de contexte » ?

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. Séparer les contextes pour limiter les nouveaux rendus
  2. Mémoriser les valeurs de contexte avec useMemo
  3. Modèle des sélecteurs de contexte
  4. Quand ne pas utiliser Context
← Retour à React Academy