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

Detaillierte Erklärung der Verwendung des Linux-Befehls lsof

lsof (List Open Files) ist ein Tool zum Anzeigen ...

Einführung in lokale Komponenten in Vue

In Vue können wir lokale Komponenten selbst defin...

Die Organisation W3C gibt Stilempfehlungen für HTML4

Dies ist die Stilempfehlung der W3C-Organisation f...

So verwenden Sie dl(dt,dd), ul(li), ol(li) in HTML

HTML <dl> Tag #Definition und Verwendung Da...

VMware Workstation-Installation (Linux-Kernel) Kylin-Grafik-Tutorial

In diesem Artikel erfahren Sie, wie Sie Kylin auf...

Vue3 erhält die aktuelle Routingadresse

Richtige Antwort Verwenden von useRouter : // Rou...

Vue+Flask realisiert Videosynthesefunktion (Drag & Drop-Upload)

Inhaltsverzeichnis Wir haben in einem früheren Ar...

Vertikales und horizontales Aufteilen von MySQL-Tabellen

Vertikale Teilung Vertikale Aufteilung bezieht si...

So installieren und speichern Sie die PostgreSQL-Datenbank in Docker

Überspringen Sie die Docker-Installationsschritte...

Ein kurzer Vortrag über das Klonen von JavaScript

Inhaltsverzeichnis 1. Oberflächliches Klonen 2. T...