Detaillierte Erläuterung des Quellcodes der vue.$set()-Methode von Vue

Detaillierte Erläuterung des Quellcodes der vue.$set()-Methode von Vue

Bei der Verwendung von Vue zum Entwickeln von Projekten stoßen Sie häufig auf dieses Problem: Wenn in den Daten von Vue ein Objekt oder Array (der Wert im Array ist ein Objekt) deklariert oder zugewiesen wird und dem Objekt ein neues Attribut hinzugefügt wird, wird die Ansicht nicht aktualisiert, wenn der Wert dieses Attributs aktualisiert wird.

Dies liegt daran, dass die neu hinzugefügten Attribute nicht reagieren und daher keine Ansichtsaktualisierung auslösen. Normalerweise wird zur Lösung dieses Problems die statische Methode Vue.set() oder die Instanzmethode this.$set() verwendet. Verwendung:

Objekt: this.$set(Ziel, Schlüssel, Wert)

Array: dies.$set(Ziel, Index, Wert)

Unabhängig davon, ob es sich um die statische Methode Vue.set() oder die Instanzmethode this.$set() handelt, ist die zugrunde liegende Implementierungslogik dieselbe. Die Implementierungslogik lautet wie folgt:

/**
 * Eine Eigenschaft für ein Objekt festlegen. Fügt die neue Eigenschaft hinzu und
 * löst eine Änderungsbenachrichtigung aus, wenn die Eigenschaft nicht
 * existiert bereits.
 */
Exportfunktionssatz (Ziel: Array<beliebig> | Objekt, Schlüssel: beliebig, Wert: beliebig): beliebig {
  // Bestimmen Sie zunächst, ob das übergebene Zielobjekt undefiniert, null oder primitiv (ursprünglicher Wert) ist, oder geben Sie eine Warnung aus, wenn (process.env.NODE_ENV !== 'production' &&
    (istUndef(Ziel) || istPrimitive(Ziel))
  ) {
    warnen(`Reaktive Eigenschaft kann nicht auf undefinierten, Null- oder primitiven Wert gesetzt werden: ${(target: any)}`)
  }
  // Überprüfen Sie, ob das Zielobjekt target ein Array und key ein gültiger Index ist, if (Array.isArray(target) && isValidArrayIndex(key)) {
    // Nimm den größeren Wert der Länge und des Schlüssels des Zielarrays als Längenattribut des Ziels target.length = Math.max(target.length, key)
    //Ersetze das Element an der Schlüsselposition durch splice target.splice(key, 1, val)
    Rückgabewert
  }
  // Wenn der Schlüssel bereits im Zielobjekt vorhanden ist, weisen Sie ihn direkt zu, wenn (Schlüssel in Ziel && !(Schlüssel in Object.prototype)) {
    Ziel[Schlüssel] = Wert
    Rückgabewert
  }
  // Holen Sie sich das Beobachterobjekt im Ziel const ob = (target: any).__ob__
  // Wenn das Ziel eine Vue-Instanz ist oder $data direkt zurückgegeben wird, wenn (target._isVue || (ob && ob.vmCount)) {
    process.env.NODE_ENV !== 'Produktion' && warn(
      'Vermeiden Sie das Hinzufügen reaktiver Eigenschaften zu einer Vue-Instanz oder ihren Stamm-$data' +
      „Zur Laufzeit – deklarieren Sie es im Voraus in der Datenoption.“
    )
    Rückgabewert
  }
  // Wenn ob nicht existiert, bedeutet dies, dass das Ziel kein responsives Objekt ist und der Wert direkt zugewiesen wird, ohne eine Ansichtsaktualisierung auszulösen, wenn (!ob) {
    Ziel[Schlüssel] = Wert
    Rückgabewert
  }
  // Wenn ob existiert, setze key als responsive Eigenschaft defineReactive(ob.value, key, val)
  // Benachrichtigung senden, um Ansichtsaktualisierung auszulösen ob.dep.notify()
  Rückgabewert
}

Das Obige ist der Quellcode der Set-Methode in Vue. Hierbei ist zu beachten, dass bei der Verarbeitung eines Arrays die verwendete Splice-Methode nicht die Methode des Arrays selbst ist, sondern eine in Vue gekapselte responsive Array-Methode.

Dies ist das Ende dieses Artikels über den detaillierten Quellcode der Vue-Methode vue.$set(). Weitere relevante Inhalte zum Quellcode der Vue-Methode vue.$set() finden Sie in den vorherigen Artikeln von 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:
  • Erkennung und Lösung von Vue.$set-Fehlerfallen
  • Fallstudie zur dynamischen Datenbindung von this.$set in Vue
  • Vue – Behebung des Fehlers. Der berechneten Eigenschaft „****“ wurde zwar ein Setter zugewiesen, sie verfügt jedoch nicht über diesen.
  • Verwendung des Setups in vue3.0 (zwei Verwendungsmöglichkeiten)
  • Eine kurze Diskussion über die Vorsichtsmaßnahmen bei der Verwendung von resetFields() in Vue

<<:  Detailliertes Tutorial zum Herstellen einer Verbindung zu einem Remote-Server-Docker zum Bereitstellen eines Spring Boot-Projekts in IDEA

>>:  Studiennotizen zur MySQL Master-Slave-Konfiguration

Artikel empfehlen

Einführung in die Überwachung des MySQL MHA-Betriebsstatus

Inhaltsverzeichnis 1. Projektbeschreibung 1.1 Hin...

Tutorial zur Master-Slave-Konfiguration der MySQL-Datenbank unter Windows

Der detaillierte Prozess zum Konfigurieren des My...

Anweisungen zum Erlernen von Vue

Inhaltsverzeichnis 1. v-Text (v-Befehlsname = „Va...

Semantische Webseiten XHTML semantische Auszeichnung

Ein weiterer wichtiger Aspekt bei der Trennung vo...

Detaillierte Erklärung inkompatibler Änderungen von Komponenten in vue3

Inhaltsverzeichnis Funktionale Komponenten So sch...

Detaillierte Erklärung zur Verwendung der JavaScript-Zwischenablage

(1) Einleitung: clipboard.js ist ein leichtes Jav...

So invertieren Sie die Implementierung einer Bézierkurve in CSS

Schauen wir uns zunächst einen CSS-Karussell-Anim...

Detaillierte Analyse des Reaktionsprinzips und der bidirektionalen Daten von Vue

Verstehen von object.defineProperty, um Reaktions...

Lösung für „Ubuntu kann keine Verbindung zum Netzwerk herstellen“

Effektive Lösung für Ubuntu, wenn in einer virtue...

Beispiel für die Erschöpfung der MySQL-Auto-Increment-ID

Anzeigedefinitions-ID Wenn die in der Tabelle def...