vendredi 25 septembre 2026

À propos

Contact

Blocs Gutenberg

Un bloc qui plante l’éditeur entier : isoler la cause avec error boundary

Écran blanc total à l'ouverture d'un article, sans message d'erreur exploitable. La méthode de désactivation une à une n'est pas la seule option, ni la plus rapide.

Par Clément Hadrot • 11 août 2021 • 5 min de lecture • Aucun commentaire
Un bloc qui plante l'éditeur entier : isoler la cause avec error boundary

Un mardi matin, un rédacteur signale que l’éditeur d’un article spécifique affiche un écran entièrement blanc dès l’ouverture, alors que tous les autres articles du site s’ouvrent normalement. Aucun message d’erreur visible à l’écran, aucune information dans les journaux PHP puisque le plantage se produit entièrement côté JavaScript, dans le navigateur. La tentation immédiate est de désactiver les extensions une à une pour isoler la coupable, une méthode qui fonctionne mais qui devient vite pénible sur un site chargé de vingt extensions actives, et qui interrompt le travail de toute une équipe éditoriale pendant l’opération.

Il existe une méthode plus rapide, qui s’appuie sur la façon dont React gère normalement les erreurs de rendu grâce aux composants de type error boundary, et sur les informations que le navigateur fournit directement dans sa console de développement sans qu’il soit nécessaire de toucher à la configuration du site.

Pourquoi l’éditeur entier plante, pas juste un bloc

Depuis plusieurs versions, l’éditeur de blocs englobe chaque bloc individuel dans son propre composant BlockErrorBoundary, ce qui signifie qu’une erreur de rendu dans un seul bloc ne devrait normalement afficher un message d’erreur circonscrit à ce bloc, sans faire tomber le reste de l’interface. Quand l’écran entier devient blanc, cela signifie généralement que l’erreur se produit en dehors de ce périmètre protégé : dans un composant enregistré via registerPlugin, dans un filtre appliqué globalement, ou pendant l’initialisation du store de données avant même que le rendu des blocs ne commence.

Premier réflexe : la console du navigateur

Avant toute désactivation d’extension, ouvrir la console de développement du navigateur affiche presque toujours la trace de la pile d’appels JavaScript ayant provoqué le plantage, avec le nom du fichier source et souvent celui de la fonction fautive. Sur un projet compilé avec @wordpress/scripts, cette trace pointe généralement vers le fichier build/index.js d’une extension précise, sans même avoir besoin de désactiver quoi que ce soit.

Uncaught TypeError: Cannot read properties of undefined (reading 'map')
    at Edit (index.js:842)
    at renderWithHooks (react-dom.development.js:16305)
L'essentiel à retenir : React isole normalement un composant défaillant ; Un plantage hors composant remonte plus haut dans l'arbre ; Les hooks navigateur et la console restent le premier réflexe

Le nom du fichier index.js associé au numéro de ligne suffit souvent à identifier l’extension à l’origine, en particulier si le nom du plugin apparaît dans le chemin complet affiché au survol de la ligne dans l’onglet réseau.

Isoler avec un paramètre d’URL

Quand la console ne suffit pas à trancher, WordPress propose un mode de débogage accessible en ajoutant ?gutenberg-experiments ou, plus utile ici, en forçant temporairement le safe mode via le paramètre d’URL réservé aux extensions, qui désactive tous les plugins pour la requête en cours sans les désactiver réellement en base de données.

wp-admin/post.php?post=42&action=edit&plugin_safe_mode=1

Ce mécanisme, calqué sur le safe mode déjà connu côté thèmes, permet de confirmer en un seul chargement de page si le plantage vient bien d’une extension active, sans qu’aucun visiteur ni collègue ne soit affecté par une désactivation réelle pendant l’investigation.

Circonscrire le composant fautif

Une fois l’extension identifiée, il reste à localiser le composant précis. Envelopper temporairement le rendu suspect dans un composant d’error boundary personnalisé, importé depuis React directement, permet de confirmer l’hypothèse sans devoir lire l’intégralité du code source de l’extension tierce.

class Isolement extends React.Component {
    state = { erreur: null };
    static getDerivedStateFromError( erreur ) {
        return { erreur };
    }
    render() {
        if ( this.state.erreur ) {
            return <p>Erreur isolée : { this.state.erreur.message }</p>;
        }
        return this.props.children;
    }
}
  • La console du navigateur reste toujours plus rapide qu’une désactivation manuelle d’extensions.
  • Le safe mode par paramètre d’URL confirme l’hypothèse sans effet de bord pour les autres utilisateurs.
  • Un error boundary personnalisé permet d’isoler précisément le composant sans lire tout le code source d’un tiers.

Prévenir plutôt que déboguer

Pour ses propres blocs, mieux vaut anticiper ce genre d’incident en enveloppant systématiquement les composants d’édition les plus complexes dans un error boundary maison, avec un message clair invitant à contacter le support plutôt qu’un écran blanc muet. C’est un filet de sécurité peu coûteux à mettre en place, qui transforme un incident bloquant en simple message d’avertissement localisé.

Un écran blanc sans message n’est jamais une fatalité technique : c’est le signe qu’aucun composant, à aucun niveau, n’a pris la responsabilité de capturer l’erreur avant qu’elle ne remonte jusqu’en haut de l’arbre.

Ce qu’il faut retenir

Face à un écran blanc dans l’éditeur, la désactivation séquentielle des extensions reste un dernier recours, pas un premier réflexe. La console du navigateur, le safe mode par paramètre d’URL et un error boundary temporaire permettent, dans la grande majorité des cas, d’isoler la cause en quelques minutes, sans interrompre le travail de toute une équipe éditoriale pendant l’investigation.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi