React-Hot-Loader v4.6

Vor ungefähr einem Monat kam React Hooks heraus und sofort wurde klar, dass React-Hot-Loader alles Himbeeren verdirbt und nicht nur nicht sehr kompatibel mit ihnen ist, sondern auch den Rest des Codes bricht. Im Allgemeinen war es ein heißer Monat ...


Heiß

Was ist drin?


  • Neue API für HMR
  • Volle Unterstützung für React 16.6 - React.lazy, React.memo und forwardRef
  • Natürlich Haken
  • Reagieren (was auch immer das bedeutet)
  • Webpack Plugin
  • Automagic ErrorBoundaries
  • Rein rendern
  • "Prinzipien"

Neue API für HMR


Hier hat sich fast nichts geändert - es war hot - blieb hot . Gerade kürzer und schlauer geworden:


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


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

Tatsächlich ist der neue hot nur der alte, der in zwei Teile geteilt ist. Infolgedessen ist es möglich, Situationen zu erkennen, in denen der erste Teil aufgerufen wurde und der zweite nicht ( Details ).


Reagiere auf 16.6 Unterstützung


forwardRef funktioniert einfach (niemand hat gesagt, dass es vorher nicht funktioniert hat), memo wird aktualisiert, obwohl es memo , aber lazy gelernt, seine Interna erneut zu importieren.


Und natürlich funktioniert alles direkt aus dem Sarg.


Hakenunterstützung reagieren


Nach der Veröffentlichung von 16.7 wurde klar, dass das Problem mit Hooks. Leider waren so große Projekte wie StoryBook ( Problem ) und Gatsby ( Problem ) von dieser Katastrophe betroffen.


Das Problem ergab sich aus der Natur von React-Hot-Loader. Um React auszutricksen und die Zerstörung der alten Version des Baums zu verhindern, verpackt HotLoader jede Komponente in einen Wrapper, der nur die Verknüpfung zur "echten" Komponente in sich selbst ändert.
Natürlich waren die SFCs in Komponenten eingewickelt, und alles war kaputt.


Tatsächlich haben sich SFCs mit SFCs umgedreht, die eine Instanz der Klasse zurückgegeben haben. Eine sehr undokumentierte "Werks" -Reaktionsfunktion.

Die Community fand schnell einen Ausweg (an den ich selbst nicht {pureSFC: true} gedacht hatte), glücklicherweise musste ich nur eine Option ändern - {pureSFC: true} , und RHL würde in eine einfachere Betriebsart wechseln, die zuvor aufgrund eines Problems mit deep- deaktiviert war. Force-Update, das wir jetzt auch aktualisiert haben.


React-Hot-Dom


Bei Hot-Loader ging es schon immer darum, React zu hacken. Dazu wurde createElement überladen und "Proxy" -Komponenten zurückgegeben, um die Prüfung in React-Dom auszutricksen. Jetzt wird Hot-Loader genau diesen Check hacken :) Es funktioniert erstaunlich.


Leider bietet die Reaktion selbst keine API dafür, daher haben wir ein spezielles Paket veröffentlicht - Hotloader / React-Dom mit allen erforderlichen Patches.


Das Setzen eines Patches ist einfach:


 // 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 

Für diejenigen, die keine Linkshänder-Pakete installieren möchten, wird das Bundle mit einem Webpack-Loader geliefert, der speziell Ihre Version von react-dom patcht.


Webpack-Lader


Der gleiche Webpack-Loader, den wir in Version 4 genagelt haben, ist wieder zu uns zurückgekehrt. Warum?


  • Um schnell auf node_modules zuzugreifen und weitere Codeinformationen bereitzustellen
  • React-Dom patchen
  • Für diejenigen, die Babel nicht mögen

Automagic ErrorBoundaries


Fehler während der Entwicklung sind eine Lieblingssache, aber niemand mochte Fehler + React-Hot-Loader - es hat einfach nicht sehr gut funktioniert und manchmal hat es überhaupt nicht funktioniert.


Ab Version 4.6 fügt React-Hot-Loader allen Komponenten vor dem Start des Updates componentDidCatch hinzu und entfernt es nach dem Update. Fehler können abgefangen und "just-in-place" angezeigt werden.


Es scheint eine Kleinigkeit zu sein, aber diese Kleinigkeit verändert den gesamten Entwicklungsprozess. Und natürlich ist alles auf Ihren Geschmack abgestimmt.
Fehlerberichterstatter


"Reines" Rendern


Dieses Problem war schon immer bei Hot-Loader. Bis sie ihre Nase steckten . Kurz gesagt - in React Dev Tools können Sie mit der rechten Maustaste auf das Menü klicken und direkt zur Komponente springen ... Genauer gesagt (es war) können Sie dies nicht tun


Entwicklungswerkzeuge


Jetzt gibt es die pureRender Option, sofern sie standardmäßig pureRender ist, wodurch einige Nebenwirkungen aus der Komponente entfernt werden, die zu diesem Problem führen.


Leider funktioniert dies nur für "klassenbasierte" Komponenten, für SFC ist ein Patch in React-Dom erforderlich, der oben erwähnt wurde.


Im Prinzip besteht jetzt die Möglichkeit, das Vorhandensein von HotLoader im System praktisch zu verbergen.


Prinzipien


Vor einer Woche veröffentlichte Dan Abramov seine Wunschliste für Hotloader - 22 Prinzipien, die ein Hotloader erfüllen muss, um „richtig“ zu sein, wenn nicht weiß und flauschig.


Derzeit sind 14 Punkte zu 100% und weitere 4 bis 50% abgeschlossen. Insgesamt - 17 von 22. Im Prinzip nicht schlecht, und es ist klar, was getan werden muss, um den Rest zu erledigen.
Wer weiß, vielleicht kehrt Dan danach zum Projekt zurück.


Na und


  • Aktualisieren Sie einfach Ihren Hot Loader!
  • Ersetzen Sie die alte hot durch die neue hot , ich weiß, es klingt seltsam, aber Sie verstehen mich.
  • versuche irgendwie zu reagieren. Dies ist nicht so notwendig, ohne diesen Schritt wird alles gut funktionieren - aber es wird sehr gut damit sein.
  • das ist alles Es sollte funktionieren. Probieren Sie es einfach aus.

Mit dir war ️


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

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


All Articles