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

Ein Artikel, der Ihnen ein tiefes Verständnis von Mysql-Triggern vermittelt

Inhaltsverzeichnis 1. Wenn beim Einfügen oder Änd...

Verwendung von VNode in Vue.js

Was ist VNode In vue.js gibt es eine VNode-Klasse...

Analyse der Ursache des Docker-Fehlers Beendet (1) vor 4 Minuten

Docker-Fehler 1. Überprüfen Sie die Ursache Docke...

Detailliertes Tutorial zum Löschen von Linux-Benutzern mit dem Befehl userdel

Was ist Serdel userdel ist ein Low-Level-Tool zum...

Beschreiben Sie kurz die MySQL InnoDB-Speicher-Engine

Vorwort: Die Speicher-Engine ist der Kern der Dat...

So fragen Sie schnell 10 Millionen Datensätze in MySQL ab

Inhaltsverzeichnis Normale Paging-Abfrage So opti...

Docker+Gitlab+Jenkins erstellt automatisierte Bereitstellung von Grund auf

Inhaltsverzeichnis Vorwort: 1. Docker installiere...

Netzwerkkonfiguration des Host Only+NAT-Modus unter VirtualBox

Die Netzwerkkonfiguration des Host Only+NAT-Modus...

Detaillierte Erklärung des Unterschieds zwischen JavaScript onclick und click

Inhaltsverzeichnis Warum wird addEventListener be...

Beispielcode zur Implementierung einer Auto-Increment-Sequenz in MySQL

1. Erstellen Sie eine Sequenztabelle CREATE TABLE...

Wir treiben IE6 alleine in den Untergang

Tatsächlich fragen wir uns jeden Tag, wann IE6 wi...

Zabbix überwacht Linux-Hosts basierend auf SNMP

Vorwort: Der Linux-Host ist relativ einfach zu ha...

Zusammenfassung der Verwendung von Element-Formularelementen

Es gibt viele Formularelemente. Hier ist eine kur...