Wie verfolgt Vue Datenänderungen?

Wie verfolgt Vue Datenänderungen?

Hintergrund

Diese Situation kommt bei der Arbeit immer wieder vor: Die auf der Seite angezeigten Daten sind falsch und müssen von Front-End-Kollegen gesucht werden.

In einer mit Vue erstellten SPA-Anwendung können die letztendlich auf der Seite angezeigten Daten von der Initialisierung bis zur endgültigen Anzeige einfach oder komplex sein. Wenn Sie auf komplexe Datenflüsse stoßen, wird die Fehlerbehebung ohne eine geeignete Methode zu einer wahren Tortur.

Wenn Sie den Aufrufstapel bei Datenänderungen sehen können, wissen Sie, was vor der Generierung der falschen Daten passiert ist und welcher Fehlerschritt zum endgültigen Fehler geführt hat. Indem Sie den Hinweisen im Aufrufstapel folgen, können Sie das Problem schnell lokalisieren.

Beispiel

<Vorlage>
  <div>
    <!-- Erwartete Ausgabe: hallo, Welt -->
    <!-- Tatsächliche Ausgabe: hallo,wolld -->
    {{ msg }}
    <button @click="f1">Nachricht ändern</button>
  </div>
</Vorlage>

<Skript>
Standard exportieren {
  Daten() {
    zurückkehren {
      Nachricht: 'hallo,',
    }
  },
  Methoden: {
    f1() {
      diese.msg += 'w'
      dies.f2();
    },
    f2() {
      diese.msg += "oo";
      dies.f3();
    },
    f3() {
      diese.msg += 'ld'
    }
  }
};
</Skript>

Missverständnis - Festlegen von Haltepunkten in Watch, um den Aufrufstapel anzuzeigen

Wir können die Rückrufe von f1 und msg im Aufrufstapel auf der rechten Seite der Seite sehen, aber wir können f2 und f3 nicht sehen. Das heißt, f2 und f3 gehen verloren, aber tatsächlich ist es f2, das den Datenfehler verursacht.

Warum gehen die Anrufinformationen von f2 und f3 verloren?

Da f1, f2 und f3 alle msg geändert haben, wurde der Watcher von msg in derselben Mikrotask ausgelöst. Da f1 zuerst ausgelöst wurde, war das Auslösen von f2 und f3 ungültig. Wenn der Watcher-Rückruf schließlich ausgeführt wird, erinnert er sich nur daran, dass er durch f1 ausgelöst wurde, sodass der Aufrufstapel zu diesem Zeitpunkt nur die Informationen von f1 sehen kann.

Der richtige Ansatz

Gehen Sie zu node_modules\vue\dist\vue.runtime.esm.js und fügen Sie einen Haltepunkt in der Set-Methode der Funktion defineReactive hinzu. Der Schlüssel hier ist der Name der zu überwachenden Variable.

Hier können Sie den vollständigen Vorgang der Nachrichtenänderung verfolgen und schnell das durch f2 verursachte Problem lokalisieren.

Zusammenfassen

Durch die Anzeige des Aufrufstapels können Sie schnell lokalisieren, wo der Datenfehler auftritt, ohne mit dem Projekt vertraut zu sein. Im Vergleich zur Verwendung von console.log oder dem hohen Zeitaufwand für das Sortieren der Codelogik kann die Datenflussmethode eine erhebliche Arbeitsbelastung reduzieren.

Oben finden Sie Einzelheiten dazu, wie Vue Datenänderungen verfolgt. Weitere Informationen dazu, wie Vue Datenänderungen verfolgt, finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung des Implementierungsprinzips der bidirektionalen Datenbindung von Vue2.0/3.0
  • Analyse des Problems des Datenverlusts durch erzwungene Aktualisierung von Vuex
  • Vue + Canvas realisiert den Effekt der Aktualisierung des Wasserfalldiagramms von oben nach unten in Echtzeit (ähnlich wie QT).
  • Lösung für das Vue-Datenzuweisungsproblem
  • Vue setzt die Daten auf ihren ursprünglichen Zustand zurück
  • Analyse und Lösung von Datenverlusten während der Wertübertragung von Vue-Komponenten
  • SpringBoot + Vue realisiert die Funktion zum Hinzufügen von Daten
  • Beispiel für handschriftliches Vue2.0-Daten-Hijacking
  • Implementierungsmethode für die bidirektionale Bindung von Vue-Daten
  • Vermeiden Sie den Missbrauch zum Lesen von Daten in Vue
  • Entwerfen Sie einen Datensammler mit Vue

<<:  Lösung für den Fehler bei der Installation von Docker auf der CentOS-Version

>>:  Docker erstellt MySQL-Erklärung

Artikel empfehlen

Sammlung von 25 Schriftarten, die in berühmten Website-Logos verwendet werden

In diesem Artikel sind die Schriftarten zusammeng...

Analyse des Hintergrundauthentifizierungsprozesses von Vue-Elementen

Vorwort: Kürzlich stieß ich in meinem Projekt auf...

Vue3 manuelle Kapselung Popup-Box-Komponente Nachrichtenmethode

In diesem Artikel wird der spezifische Code der m...

Implementierung von Nginx Hot Deployment

Inhaltsverzeichnis Semaphor Nginx-Hot-Bereitstell...

Einfaches Grafik-Tutorial zur Verwendung von Adobe Brackets

Adobe Brackets ist eine Open Source-, einfache un...

Detaillierte Erklärung der Fallstricke von MySQL 8.0

Ich habe heute MySQL 8.0 aktualisiert. Das erste ...

Beispiel für die Verwendung von rem zum Ersetzen von px in einem Vue-Projekt

Inhaltsverzeichnis Werkzeug Installieren Sie das ...

Detaillierte Erläuterung des adaptiven Anpassungsproblems des Vue-Mobilterminals

1. Erstellen Sie ein Projekt mit Vue UI 2. Wählen...

Natives JS zur Implementierung der Drag-Position-Vorschau

In diesem Artikel wird eine kleine Demo gezeigt, ...