React-Hot-Loader v4.6

منذ حوالي شهر ، ظهر React Hooks ، وعلى الفور أصبح من الواضح أن React-Hot-Loader يفسد كل شيء من التوت ولا يقتصر على كونه متوافقًا تمامًا ، بل يكسر بقية الكود أيضًا. بشكل عام ، كان شهرًا حارًا ...


حار

ما في الداخل؟


  • واجهة برمجة تطبيقات جديدة لـ HMR
  • دعم React 16.6 الكامل - React.lazy و React.memo و forwardRef
  • بالطبع السنانير
  • React - dom (مهما كان ذلك يعني)
  • Webpack المساعد
  • Automagic ErrorBoundaries
  • تقديم النقي
  • "المبادئ"

واجهة برمجة تطبيقات جديدة لـ HMR


هنا ، لم يتغير شيء تقريبًا - كان hot - ظل hot . أصبحت أقصر وأكثر ذكاءً:


قبل
 import {hot} from 'react-hot-loader'; .... export default hot(module)(MyComponent) 


الان
 import {hot} from 'react-hot-loader/root'; .... export default hot(MyComponent) 

في الواقع ، فإن hot الجديد هو القديم فقط ، وينقسم إلى قسمين. نتيجة لذلك ، من الممكن اكتشاف الحالات التي تم فيها استدعاء الجزء الأول ، والثاني لا ( التفاصيل ).


الرد 16.6 الدعم


forwardRef يعمل فقط (لم يقل أحد أنهم لم يعملوا من قبل) ، سيتم تحديث memo على الرغم من أنها memo ، ولكن علمت lazy لإعادة استيرادها الداخلية.


وبالطبع ، كل شيء يعمل بشكل صحيح من التابوت.


رد فعل السنانير الدعم


بعد إصدار 16.7 ، أصبح من الواضح أن مشكلة مع هوكس. لسوء الحظ ، تأثرت هذه الكارثة بمشاريع كبيرة مثل StoryBook ( issue ) و Gatsby ( issue ).


المشكلة الناتجة عن طبيعة React-Hot-Loader - من أجل خداع React ومنع إتلاف الإصدار القديم من الشجرة ، يلف HotLoader كل مكون في غلاف يغير فقط الرابط إلى المكون "الحقيقي" داخل نفسه.
بالطبع ، كانت ملفوفة SFCs في المكونات ، وكسر كل شيء.


في الواقع ، تحولت SFCs مع SFCs التي أرجعت مثيل للفئة. رد فعل "مصنع" غير موثقة للغاية.

عثر المجتمع بسرعة على مخرج (لم أفكر فيه بنفسي على {pureSFC: true} ) ، لحسن الحظ ، كان علي فقط تغيير خيار واحد - {pureSFC: true} ، وستذهب مكتبة الصحة الإنجابية إلى وضع أبسط من التشغيل ، تم إيقافه مسبقًا بسبب مشكلة في العمق تحديث القوة ، والتي قمنا بتحديثها الآن أيضا.


رد فعل الساخنة دوم


لطالما كان Hot-Loader يدور حول اختراق React ، وفعل ذلك من خلال التحميل الزائد createElement وإرجاع المكونات "الوكلاء" لخداع التحقق داخل React-Dom . الآن سوف Hot-Loader اختراق هذا الاختيار للغاية :) إنه يعمل بشكل مثير للدهشة.


لسوء الحظ ، فإن الرد بحد ذاته لا يوفر أي واجهة برمجة تطبيقات لهذا الغرض ، لذلك أصدرنا حزمة خاصة - اللودر الساخن / رد الفعل دوم مع جميع التصحيحات اللازمة.


وضع التصحيح بسيط:


 // this would always work yarn add @hot-loader/react-dom@npm:react-dom // or change your webpack config alias: { 'react-dom': '@hot-loader/react-dom' } // or do the same with package.json to enable it in parcel 

بالنسبة لأولئك الذين لا يرغبون في تثبيت حزم أعسر ، تأتي الحزمة مع webpack-loader والتي ستقوم بتصحيح إصدار رد الفعل الخاص بك على وجه التحديد.


Webpack محمل


عاد محمل webpack نفسه الذي أرسلناه في الإصدار 4 إلينا مرة أخرى. لماذا؟


  • للحصول بسرعة على عقد nod_modules وتوفير المزيد من معلومات التعليمات البرمجية
  • لتصحيح رد فعل دوم
  • بالنسبة لأولئك الذين لا يحبون بابل

Automagic ErrorBoundaries


تعتبر الأخطاء أثناء التطوير أمرًا مفضلاً ، ولكن لا أحد يحب الأخطاء + محمل الرد السريع - لم يعمل بشكل جيد جدًا ، وفي بعض الأحيان لم ينجح على الإطلاق.


بدءًا من الإصدار 4.6 ، ستقوم React-Hot-Loader بإضافة componentDidCatch إلى جميع المكونات قبل بدء التحديث وإزالته بعد التحديث. يمكن اكتشاف الأخطاء وعرضها "في مكانها الصحيح".


يبدو مثل تافه ، ولكن هذا تافه يغير عملية التنمية بأكملها. وبالطبع ، يتم ضبط كل شيء حسب ذوقك.
مراسل خطأ


"نقية" تقديم


هذه المشكلة كانت دائما مع Hot-Loader. حتى مطعون أنفهم . باختصار - في React Dev Tools ، يمكنك النقر بزر الماوس الأيمن فوق القائمة والانتقال مباشرة إلى المكون ... بتعبير أدق (كان) لا يمكنك القيام بذلك


أدوات ديف


يوجد الآن خيار pureRender ، طالما تم إيقاف تشغيله افتراضيًا ، مما يؤدي إلى إزالة بعض الآثار الجانبية من المكون الذي يؤدي إلى هذه المشكلة.


لسوء الحظ ، يعمل هذا فقط مع المكونات "المستندة إلى فئة" ، لـ SFC مطلوب تصحيح في رد فعل dom الذي ذكر أعلاه.


من حيث المبدأ ، هناك الآن فرصة لإخفاء وجود HotLoader عمليًا في النظام.


المبادئ


منذ أسبوع واحد فقط ، نشر دان أبراموف قائمته المفضلة للجرافة الساخنة - 22 مبدأًا يجب على اللودر الساخن الوفاء بها حتى يكون "صوابًا" إن لم يكن أبيضًا ورقيقًا.


حاليا ، يتم الانتهاء من 14 نقطة بنسبة 100 ٪ ، وآخر من 4 إلى 50 ٪. المجموع - 17 من أصل 22. من حيث المبدأ ، ليس سيئًا ، ومن الواضح ما يجب القيام به لإنهاء الباقي.
من يدري ، ربما بعد ذلك سيعود دان إلى المشروع.


ماذا في ذلك؟


  • فقط قم بترقية اللودر الساخن!
  • استبدل القديم القديم hot الجديدة ، وأنا أعلم أنه يبدو غريباً ، لكنك تفهمني.
  • محاولة التصحيح رد فعل دوم بطريقة أو بأخرى. هذا ليس ضروريًا ، فسيعمل كل شيء بشكل جيد بدون هذه الخطوة - لكنه سيكون جيدًا تمامًا.
  • هذا كل شئ. يجب أن تعمل. مجرد محاولة إعطائها.

معك كان ️


https://github.com/gaearon/react-hot-loader

Source: https://habr.com/ru/post/ar433122/


All Articles