3

Wenn ich eine Änderung in einer Komponente vornehmen, rekompiliert und repackte webpack Hot-Swaps das Modul über .. aber jetzt läuft mein Code n mal wo n ist die Menge der Zeiten heiß Modul-Swapping hat stattgefunden. Zum Beispiel mache ich eine Änderung und jetzt werden die Funktionen zweimal ausgeführt. Ich mache noch eine Änderung, und die Funktionen werden dreimal ausgeführt. Ich kann ein console.log(Date.now()) im dispatchToken auf meinem Speicher setzen und ich kann es n mal laufen sehen.Hot Loader duplizieren Code (n-mal) anstelle von Hot-Swapping

Store: http://pastebin.com/PVnyf572

webpack.config.js: http://pastebin.com/MsziqH9v

und ich laufe webpack-dev-Server mit webpack-dev-server app/client.js --inline --hot --colors

Wenn ich eine komplizierte Änderung vornehmen, bekomme ich oft die Folgefehlermeldung (Obwohl dies nicht passiert, wenn ich Zeile 60 von Store ändere, um die Gesundheit um z. B. 10 anstelle von 6 zu erhöhen):

I t erscheint, dass React Hot Loader nicht korrekt konfiguriert ist. Wenn Sie NPM verwenden, stellen Sie sicher, dass Ihre Abhängigkeiten keine doppelten React-Distributionen in ihre node_module ziehen und dass (react) der React-Instanz entspricht, mit der Sie Ihre App rendern. Wenn Sie eine vorkompilierte Version von React verwenden, finden Sie unter https://github.com/gaearon/react-hot-loader/tree/master/docs#usage-with-external-react Anweisungen zur Integration.

+0

Sind Sie sicher, dass Sie nicht zwei separate Kopien von React auf einer Seite geladen haben, auf der die Fehlermeldung angezeigt wird? Wenn Sie beispielsweise in den Entwicklertools/Quellen Strg + O oder Cmd + O drücken und React eingeben, haben Sie nur eine React.js? [Beispiel] (https://d262ilb51hltx0.cloudfront.net/max/800/1*uRi1xESkWG6xJQIsKNhsZA.png) – HiDeo

Antwort

0

Es klingt gelöst werden, wie Sie Hot-Nachladen etwas sind, die Nebenwirkungen hat.

Die Webpack-Dokumentation enthält a few examples, um zu zeigen, wie mit dem Warmladen umzugehen ist.

Basierend auf Pastebin Code würde ich denke, dass dies ein Nebeneffekt ist:

this.dispatchToken = Dispatcher.register(this.onAction.bind(this)) 

Ich glaube, Sie module.hot Erkennungscode an die PlayerStore Datei zu ‚austragen‘, wenn das Modul hinzufügen müssen ersetzt werden .