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

So aktualisieren Sie den Kernel in Deepin Linux manuell

deepin und Ubuntu sind beides auf debian basieren...

Lösung zum automatischen Neustart von MySQL

Vorwort Kürzlich trat in der Testumgebung ein Pro...

So unterstützen Sie vollständiges Unicode in MySQL/MariaDB

Inhaltsverzeichnis Einführung in utf8mb4 Fehler b...

Detaillierte Erklärung der Docker-Maschinennutzung

Docker-Machine ist ein offiziell von Docker berei...

Grundprinzipien des skalierbaren MySQL-Designs

Inhaltsverzeichnis Vorwort 1. Was ist Skalierbark...

Implementierungsskript für geplante Datenbanksicherung unter Linux

Inhaltsverzeichnis Szenario: Die Serverdatenbank ...

Semantik, Schreiben und bewährte Methoden für Link A

Die Semantik, der Schreibstil und die Best Practi...

Zusammenfassung der XHTML-Anwendung im Webdesign-Studium

<br />Im Allgemeinen ist die Dateiorganisati...

Implementierung der privaten Docker-Bibliothek

Die Installation und Bereitstellung eines private...

Zusammenfassung zum Erlernen von Docker-Befehlen in einem Artikel

Inhaltsverzeichnis Einführung Spiegel-Repository ...

Grafisches Tutorial zu MySQL-Downloads und Installationsdetails

1. Um die MySQL-Datenbank herunterzuladen, besuch...

Drei Beispiele für Node.js-Methoden zum Abrufen von Formulardaten

Vorwort Nodejs ist eine serverseitige Sprache. Wä...