2016-12-26 4 views
1

ich an dieser reagieren/Fluss Beispiel suchen, und dieser Typ eine Dispatcher-Instanz in einer Datei wie folgt schafft:Importmodule mit globaler Instanz

// https://github.com/learncodeacademy/react-js-tutorials/blob/master/3-flux/src/js/dispatcher.js 
import { Dispatcher } from "flux"; 
export default new Dispatcher; 

Und dann ist es in mehreren anderen Dateien mit durch den Import es. Jedoch, und das ist der Teil, der mich unbehaglich macht, er benutzt es in jeder einzelnen Datei, als wäre es dieselbe Instanz.

import dispatcher from "../dispatcher"; 
dispatcher.dispatch({type: "event"}); 

eine separate Datei:

import dispatcher from "../dispatcher"; 
dispatcher.register(...); 

Es macht Sinn für mich, warum es für ihn arbeitet, da er webpack mit hat alle Importe in einer einzigen Datei zu kombinieren. Aber was, wenn ich meine Dateien getrennt halten möchte? Funktioniert das noch, oder muss ich etwas anderes tun, um aus mehreren Dateien auf denselben Dispatcher zuzugreifen?

+0

Es ist nicht die Tatsache, dass Webpack es eine "Datei" setzt, eher die Schaffung der entsprechenden Funktionsumfang Grenzen zwischen Modulen durch Erstellen eines Abhängigkeitsgraphen. Obwohl Sie in jeder einzelnen Komponente "Import Reaction from 'reacts" schreiben könnten, ziehen Sie nicht jedes Mal neue Instanzen von React hinzu. – azium

+0

meinst du die gleiche Instanz des Dispatcher über Seitenaktualisierungen oder sogar verschiedene Anwendungen? – azium

+0

@azium Ahh das macht Sinn. Nein, nicht über Aktualisierungen oder Anwendungen. Gleiche App, gleiche Seite – Entity

Antwort

1

Sobald das Webpack-Modulsystem eine Abhängigkeit auflöst, dh wenn die "Exporte" eines Moduls ausgewertet werden, werden sie zwischengespeichert. Egal wie viele Module diese Abhängigkeiten "importieren".

Bedeutung, dass dieses Stück Code:

export default new Dispatcher; 

... nur einmal durch den gesamten Lebenszyklus des Programms ausgewertet.

Webpack macht genau das, was Node.js selbst tut. Module werden nur einmal ausgewertet.