So überwachen Sie Array-Änderungen in Vue

So überwachen Sie Array-Änderungen in Vue

Vorwort

Vor einiger Zeit habe ich die Prinzipien responsiver Daten in Vue kennengelernt (und mir Notizen zu den responsiven Prinzipien von Vue gemacht). Tatsächlich handelt es sich um ein responsives Design, das Getter und Setter über Object.defineProperty steuert und den Beobachtermodus verwendet. Dann verfügt das Array über eine Reihe von Operationsmethoden, die die Getter- und Setter-Methoden des Arrays nicht auslösen. Wie wird also das responsive Design für Arrays in Vue implementiert? Lassen Sie es uns gemeinsam lernen.

Quellcode

https://github.com/vuejs/vue/blob/dev/src/core/observer/array.js

Wo beginne ich mit meinem ersten Lernschritt?

Ähm …
Ich denke, wir sollten zunächst das Prinzip der Datenreaktivität in Vue klären, damit wir besser verstehen, wie Array-Änderungen in Vue erkannt werden. Sie können den Artikel daher online finden und ihn mit dem Quellcode lesen. Ich glaube, Sie werden ihn verstehen. Ich möchte Ihnen einen Blog empfehlen, den ich zuvor gelesen habe, sowie den Lernbericht, den ich nach dem Lesen geschrieben habe, haha.

Vue-Responsive-Prinzip

Das Prinzip und die Implementierung der bidirektionalen Bindung in Vue

Okay, schauen wir uns das zuerst an. Ha ha!

Beginnen Sie mit einem Bild

Schauen wir uns zunächst das folgende Bild an und verstehen wir die Idee der Implementierung in Vue, damit diese klar und verständlich ist, wenn wir uns später die Implementierung des Quellcodes ansehen.

Schauen Sie sich dieses Bild an und denken Sie darüber nach. Haben Sie ein allgemeines Verständnis?

Stellen Sie zunächst fest, ob der Browser den __proto__-Zeiger unterstützt

Schreiben Sie diese 7 Methoden des Arrays neu und richten Sie das neu geschriebene Array dann auf den Prototyp des Arrays, je nachdem, ob __proto__ unterstützt wird.

Ist das nicht einfach? ! !

Schauen Sie sich den Quellcode an

Nachdem wir nun das Implementierungsprinzip verstanden haben, werfen wir einen Blick auf den Quellcode. Der Hauptzweck des Betrachtens des Quellcodes besteht darin, ein tieferes Verständnis dafür zu bekommen, wie der Autor ihn implementiert hat. Sie können sich auch hervorragende Codecodierungsmethoden ansehen und von ihnen lernen.

Ich habe einige Erklärungen in den Codeblock unten geschrieben!

//https://github.com/vuejs/vue/blob/dev/src/core/observer/array.js


//Die Def-Methode ist eine Methodenschicht, die auf der Object.defineProperty-Kapselung basiert. Sie ist sehr einfach. Ich werde den Code unten posten, damit Sie nicht danach suchen müssen.
importiere { def } von '../util/index' 

//Speichern Sie das native Array-Prototypobjekt const arrayProto = Array.prototype

// Eine Prototypverbindung herstellen und den Prototyp von arrayMethods auf Array.prototype richten
exportiere const arrayMethods = Objekt.erstellen(arrayProto)

const methodsToPatch = [
  'drücken',
  'Pop',
  'Schicht',
  'aufheben',
  'spleißen',
  'Sortieren',
  'umkehren'
]

methodsToPatch.forEach(Funktion (Methode) {
  // Cache native Methode const original = arrayProto[Methode]
  def(ArrayMethods, Methode, Funktion Mutator (...args) {
    var args = [], 
    len = Argumente.Länge;
    während (Länge--) args[Länge] = Argumente[Länge];
    const result = original.apply(this, args) // Das ursprüngliche Ausführungsergebnis der Array-Methode const ob = this.__ob__ // Dieses __ob__ ist eine Instanz von Observe~~~~
    eingefügt lassen
    Schalter (Methode) {
      Fall 'push':
      Fall 'Unshift':
        eingefügt = Argumente
        brechen
      Fall 'Spleißen':
        eingefügt = args.slice(2)
        brechen
    }
    if (inserted) ob.observeArray(inserted) // Wenn sich das Array ändert, rufe observeArray erneut auf
    // Änderung melden
    ob.dep.notify() //
    Ergebnis zurückgeben
  })
})

Dies ist der Code für Observer:

var Beobachter = Funktion Beobachter(Wert) {
    dieser.Wert = Wert;
    dies.dep = neues Dep();
    dies.vmCount = 0;
    def(value, '__ob__', this); //Hier können Sie sehen, dass an jedes Objekt eine Observe-Instanz gebunden ist, daher ist this.__ob__ im obigen Code this if (Array.isArray(value)) { // Hier bestimmen wir, ob es sich um einen Array-Datentyp handelt. Wenn ja, wird observeArray verwendet
      wenn (hasProto) {
        protoAugment(Wert, ArrayMethoden);
      } anders {
        copyAugment(Wert, Array-Methoden, Array-Schlüssel);
      }
      this.observeArray(value); //Hier werden Daten vom Typ Array wie folgt verarbeitet} else {
      dies.walk(Wert);
    }
  };

Das Folgende ist die Implementierung von observeArray:

Observer.prototype.observeArray = Funktion observeArray(Elemente) {
    für (var i = 0, l = Elemente.Länge; i < l; i++) {
      observe(items[i]); // Die observe-Methode lautet wie folgt}
  };

Hier sehen wir uns die Beobachtungsmethode an:

Funktion beobachten(Wert, asRootData) {
    if (!isObject(value) || Wertinstanz von VNode) {
      zurückkehren
    }
    var ob;
    wenn (hasOwn(Wert, '__ob__') && Wert.__ob__ Instanz von Observer) {
      ob = Wert.__ob__;
    } sonst wenn (
      sollteBeobachten &&
      !isServerRendering() &&
      (Array.isArray(Wert) || isPlainObject(Wert)) &&
      Objekt.isExtensible(Wert) &&
      !Wert._isVue
    ) {
      ob = neuer Beobachter(Wert);
    }
    if (asRootData && ob) {
      ob.vmCount++;
    }
    return ob
  }

Hier geht es um die Implementierung der def-Methode. Sie ist sehr einfach, deshalb werde ich sie nicht näher erläutern:

Funktionsdefinition (Objekt, Schlüssel, Wert, aufzählbar) {
    Objekt.defineProperty(Objekt, Schlüssel, {
      Wert: val,
      aufzählbar: !!aufzählbar,
      beschreibbar: true,
      konfigurierbar: true
    });
}

Oben finden Sie Einzelheiten zur Überwachung von Array-Änderungen in Vue. Weitere Informationen zur Überwachung von Arrays durch Vue finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • So überwachen Sie Array-Änderungen in Vue
  • Vue-Entwicklungsüberwachung zur Überwachung von Array-, Objekt- und Variablenoperationen
  • Vue überwacht Array-Änderungen Quellcode-Analyse
  • Vue-Schlüssel zur physischen Überwachung von Mobiltelefonen + Exit-Prompt-Code
  • Vue Deep Monitoring (Überwachung von Änderungen an Objekten und Arrays) und sofortige Ausführung von Überwachungsbeispielen
  • Die übergeordnete Vue-Komponente überwacht den Lebenszyklus der untergeordneten Komponente
  • Vue implementiert das Abhören von Fensterschließereignissen und das Senden von Anfragen, bevor das Fenster geschlossen wird
  • Vue überwacht den Änderungsvorgang der Treeselect-Auswahl
  • Vue überwacht Routenänderungen und aktualisiert die Seite in der Datei App.vue

<<:  So starten Sie Tomcat mit jsvc (als normaler Benutzer ausführen)

>>:  (MariaDB) Umfassende Erklärung der MySQL-Datentypen und Speichermechanismen

Artikel empfehlen

Vereinfachen Sie die komplexe Website-Navigation

<br />Das Navigationsdesign stellt eine der ...

SQL-Implementierung von LeetCode (178. Punkterangliste)

[LeetCode] 178.Ranglistenergebnisse Schreiben Sie...

Implementierung der Änderung von Konfigurationsdateien im Docker-Container

1. Betreten Sie den Container docker run [Option]...

CSS Transition erweitert und reduziert Elemente durch Ändern der Höhe

Ein allgemeines Entwicklungsbedürfnis besteht dar...

jQuery-Plugin zur Implementierung des Dashboards

Das jQuery-Plug-In implementiert das Dashboard zu...

Lernbeispiel für den Nginx Reverse Proxy

Inhaltsverzeichnis 1. Reverse-Proxy-Vorbereitung ...

Ausführliche Erläuterung des Prinzips des MySQL Innodb-Index

Einführung Wenn ich zurückblicke, sagte der Lehre...

Kopieren von Feldern zwischen verschiedenen Tabellen in MySQL

Manchmal müssen wir eine ganze Datenspalte aus ei...

Aufzeichnungen zur Verwendung von SSH-Befehlen unter Windows 8

1. Öffnen Sie die virtuelle Maschine und das Git-...

Lösen Sie das Problem „Rand: oberer Kollaps“ in CCS

Die HTML-Struktur ist wie folgt: Die CCS-Struktur...