react18-batching-patterns

Par github · awesome-copilot

Fournit des modèles précis pour diagnostiquer et corriger les régressions liées au batching automatique dans les class components React 18. Utilise cette skill chaque fois qu'un class component contient plusieurs appels `setState` dans une méthode async, dans un `setTimeout`, dans un `.then()` ou `.catch()` de Promise, ou dans un gestionnaire d'événement natif. Utilise-la avant d'écrire tout appel `flushSync` — l'arbre de décision présenté ici évite le recours inutile à `flushSync`. Utilise également cette skill pour corriger les échecs de tests causés par des assertions sur des états intermédiaires qui se cassent après une migration vers React 18.

npx skills add https://github.com/github/awesome-copilot --skill react18-batching-patterns

Motifs de batching automatique React 18

Référence pour diagnostiquer et corriger le changement brisé silencieux le plus dangereux de React 18 pour les bases de code utilisant des class components.

Le changement fondamental

Localisation de setState React 17 React 18
Gestionnaire d'événement React Batched Batched (identique)
setTimeout Re-rendu immédiat Batched
Promise .then() / .catch() Re-rendu immédiat Batched
async/await Re-rendu immédiat Batched
Callback Native addEventListener Re-rendu immédiat Batched

Batched signifie : tous les appels setState dans ce contexte d'exécution se vident ensemble en un seul re-rendu à la fin. Aucun rendu intermédiaire n'intervient.

Diagnostic rapide

Lisez chaque méthode async de class. Demandez-vous : du code après un await lit-il this.state pour prendre une décision ?

Le code lit this.state après await ?
  OUI → Catégorie A (bug silencieux de lecture d'état)
  NON, mais un rendu intermédiaire doit être visible pour l'utilisateur ?
    OUI → Catégorie C (flushSync nécessaire)
    NON → Catégorie B (refactoriser, pas de flushSync)

Pour le motif complet de chaque catégorie, lisez :

  • references/batching-categories.md - Catégories A, B, C avec code avant/après complet
  • references/flushSync-guide.md - quand utiliser flushSync, quand NE PAS l'utiliser, syntaxe d'import

La règle flushSync

Utilisez flushSync avec parcimonie. Cela force un re-rendu synchrone, contournant le scheduler concurrent de React 18. En abuser annule les bénéfices de performance de React 18.

Utilisez flushSync uniquement quand :

  • L'utilisateur doit voir un état d'interface intermédiaire avant le début d'une opération async
  • Un spinner/état de chargement doit s'afficher avant qu'une fetch ne commence
  • Les étapes d'interface séquentielles ont des états visibles distincts (assistant de progression, flux multi-étapes)

Dans la plupart des cas, la correction est un refactorisation - restructurer le code pour ne pas lire this.state après await. Lisez references/batching-categories.md pour l'approche correcte selon la catégorie.

Skills similaires