Articles

Tous les avertissements de votre projet ne viennent pas du code que vous avez écrit.

1 min de lecture

Il y a quelques jours, je voyais sans cesse cet avertissement dans la console : « Unable to preventDefault inside passive event listener invocation. »

Un événement traverse la porte ouverte d’un écouteur, tandis qu’un module tiers signalé par un triangle d’avertissement, hors de la limite en pointillés du code, est relié à une branche d’annulation bloquée.

Je travaillais sur une fonctionnalité Stories façon Instagram : images, vidéos, navigation au tap et pause en appui long. La fonctionnalité marchait bien, mais l’avertissement apparaissait presque à chaque tap sur mobile.

Ma première réaction était évidente : où me suis-je trompé ? J’ai lu la stack trace, et le problème ne venait pas du tout de mon code. Il venait de react-insta-stories : la bibliothèque appelait e.preventDefault() directement dans un événement tactile.

Le problème : l’événement passait par un listener passif, donc pas toujours annulable. Le navigateur continuait donc d’afficher cet avertissement. Le correctif était simple : if (e.cancelable) e.preventDefault(); ; une ligne, et l’avertissement a disparu sans changer le comportement.

Ce que j’en retiens surtout : tous les avertissements de votre projet ne viennent pas du code que vous avez écrit. Parfois, lire la stack trace attentivement peut vous éviter de passer des heures à corriger la mauvaise chose. J’ai signalé le problème en amont, car il y a de bonnes chances qu’un autre développeur rencontre exactement le même problème.

Publication originale (site externe)

Partager cet article