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

Implementierung der Remote-Linux-Entwicklung mit vscode

Verabschieden Sie sich von der Vergangenheit Bevo...

Beispiel einer Vorrendering-Methode für eine Vue-Einzelseitenanwendung

Inhaltsverzeichnis Vorwort vue-cli 2.0 Version vu...

MySQL 8.0.19 Installations- und Konfigurations-Tutorial unter Windows 10

Ich werde nächstes Semester MySQL lernen. Ich hab...

CocosCreator-Tutorial für den Einstieg: Erstellen Sie Ihr erstes Spiel mit TS

Inhaltsverzeichnis Prämisse TypeScript vs. JavaSc...

Wie gestaltet man eine Webseite? Wie erstelle ich eine Webseite?

Wenn es um das Verständnis von Webdesign geht, sc...

Vue-Kapselungskomponente Bildkomponente hochladen

In diesem Artikelbeispiel wird der spezifische Co...

Lösung für das Problem des Sitzungsverlusts bei Nginx

Bei der Verwendung von Nginx als Reverse-Proxy fü...

Beim Bereitstellen von rabbitmq mit Docker sind zwei Probleme aufgetreten

1. Hintergrund Die folgenden zwei Probleme treten...

Implementierung der vertikalen Zentrierung mit unbekannter Höhe in CSS

Dieser Artikel stellt hauptsächlich die Implement...

Detaillierte Einführung in Protokolle im Linux-System

Inhaltsverzeichnis 1. Logbezogene Dienste 2. Geme...