1. Dep Tatsächlich handelt es sich hierbei um einen Container zum Sammeln von Abhängigkeiten. Klasse Dep{ Konstruktor() { dies._subs = []; } abhängen() { dies._subs.push(Dep.target) } benachrichtigen() { this._subs.forEach(item => { Element.fn(); }) } } // Tatsächlich ist dies der Beginn der Liebe zwischen Dep und Watcher. // Eine globale Eigenschaft wird in Watcher verwendet, um Watcher zu speichern Dep.Ziel = null; Funktion pushTarget(watch) { Dep.target = beobachten; } Funktion popTarget() { Dep.Ziel = null; } 2. Verstehen Sie den Beobachter
// In Accessor-Eigenschaftsfunktion konvertieren defineReactive (obj, key, val, shallow) { // Einen Container für die Abhängigkeitssammlung erstellen let dep = new Dep(); let childOb = !shallow und observe(val) Objekt.defineProperty(Objekt, Schlüssel, { aufzählbar: wahr, konfigurierbar: true, get: Funktion reactiveGetter () { wenn(Dep.target) { // Abhängigkeiten sammeln dep.depend(); } Rückgabewert; // ... }, set: Funktion reactiveSetter (newVal) { wenn (neuer Wert === Wert) return; // Weiter rekursiv durchlaufen observe(newVal); //Abhängigkeit auslösen dep.notify(); // ... } }) } Klasse Beobachter{ Konstruktor(Daten) { dies.walk(Daten); } gehe(Daten) { const keys = Objekt.keys(Daten) für (lass i = 0; i < Schlüssel.Länge; i++) { defineReactive(Daten, Schlüssel[i], Daten[Schlüssel[i]]) } } } // Alle Eigenschaften des Datenobjekts rekursiv in Accessor-Eigenschaften umwandeln function observe (data) { wenn(Object.prototype.toString.call(data) !== '[Objekt Objekt]') return; neuer Beobachter (Daten); } An diesem Punkt können Sie alle Eigenschaften eines beliebigen Objekts in Accessoren umwandeln 3. Verstehen Sie Uhr und Beobachterconst Daten = { ein: 1, b: 2 } //Überwachen Sie zuerst ein Objekt. observe(data); Die Hauptfunktion Klasse Watcher{ /** * @params {Funktion} exp ein Eigenschaftsausdruck * @params {Funktion} fn Rückruf */ Konstruktor(Ausdruck, Funktion) { dies.exp = exp; dies.fn = fn; //Watcher speichern // Dep.target = dies; drückeZiel(dieses); //Führen Sie die Ausdrucksfunktion zunächst einmal aus und führen Sie im aufrufenden Prozess // Den Accessor für data.a auslösen und das Abrufen von data.a wird ausgeführt. // Lösen Sie dep.depend() aus, um mit dem Sammeln von Abhängigkeiten zu beginnen. this.exp(); // Dep.target freigeben popZiel(); } } // neuer Watcher Eine solche Abhängigkeit wird gesammelt new Watcher(() => { gib Daten.a + Daten.b zurück; }, () => { console.log('ändern') }) 4. Trigger-Abhängigkeitdata.a = 3; // ändern data.b = 3; // ändern 5. Fassen Sie den Prozess zusammen
Dies ist das Ende dieses Artikels über die Implementierung eines einfachen Datenantwortsystems. Weitere relevante Inhalte zum Datenantwortsystem finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
>>: So steuern Sie den Anteil untergeordneter Flex-Elemente auf der Hauptachse
Inhaltsverzeichnis 1. Warum brauchen wir vue3? 2....
In diesem Artikelbeispiel wird der spezifische Co...
Link zum Download der ZIP-Datei auf der offiziell...
Ich habe mich kürzlich auch mit der Leistungsopti...
Die Indexzusammenführung ist ein intelligenter Al...
NextCloud Sie können beliebige Dateien oder Ordne...
Es gibt ein Unternehmen, das die 5 zuletzt überpr...
In diesem Artikel erfahren Sie mehr über die Inst...
Was ist ein Sticky-Footer-Layout? Unser übliches ...
Inhaltsverzeichnis 1. Fehlerbehebung und Lokalisi...
Inhaltsverzeichnis 1. Reverse-Proxy-Vorbereitung ...
Zeichenfolgenfunktionen Überprüfen Sie den ASCII-...
Inhaltsverzeichnis 1. Verwendung in Komponenten 2...
Ich glaube, dass vielen Leuten, die MySQL schon l...
Der empfohlene Code zum Abspielen von Hintergrundm...