المقالات

ليس كل تحذير في مشروعك سببه الكود الذي كتبته.

مدة القراءة: 1 دقيقة

قبل أيام، ظللت أرى هذا التحذير في وحدة التحكم: «Unable to preventDefault inside passive event listener invocation.»

يمر حدث عبر بوابة مستمع مفتوحة، بينما تتصل وحدة من طرف ثالث تحمل مثلث تحذير، خارج حدود الشيفرة المتقطعة، بمسار إلغاء مسدود.

كنت أعمل على ميزة Stories شبيهة بما في Instagram، تضم صورًا ومقاطع فيديو، وتنقلًا بالنقر، وإيقافًا مؤقتًا بالضغط المطوّل. كانت الميزة نفسها تعمل جيدًا، لكن التحذير كان يظهر مع كل نقرة على الهاتف تقريبًا.

كان أول ما خطر لي هو السؤال البديهي: أين أخطأت؟ فحصت تتبّع المكدس (stack trace)، فتبيّن أن المشكلة ليست في كودي أصلًا، بل في react-insta-stories؛ إذ كانت المكتبة تستدعي e.preventDefault() مباشرة داخل حدث لمس.

كانت المشكلة أن الحدث يمرّ عبر مستمع أحداث سلبي (passive event listener)، ما يعني أنه لا يكون قابلًا للإلغاء دائمًا، لذلك واصل المتصفح إصدار التحذير. وكان الحل بسيطًا: if (e.cancelable) e.preventDefault(); سطر واحد أزال التحذير من دون تغيير السلوك.

الخلاصة التي خرجت بها: ليس كل تحذير في مشروعك سببه الكود الذي كتبته. أحيانًا توفر عليك قراءة تتبّع المكدس بعناية ساعات من محاولة إصلاح المشكلة الخطأ. أبلغت عن المشكلة للمشروع الأصلي، لأن من المرجح أن يواجه مطوّر آخر المشكلة نفسها تمامًا.

النشر الأصلي (موقع خارجي)

مشاركة المقال