Analyse und Lösung von Datenverlusten während der Wertübertragung von Vue-Komponenten

Analyse und Lösung von Datenverlusten während der Wertübertragung von Vue-Komponenten

Vorwort

Im vorherigen Artikel wurden zwei Datentypen in JavaScript, Basistypen und Referenztypen, sowie flache und tiefe Kopien von Referenztypen vorgestellt. Hierbei ist zu beachten, dass die Methode zum tiefen Kopieren von Referenztypwerten in diesem Artikel nicht perfekt ist und einige Attributwerte im Referenztypwert nicht vollständig in die neue Variable kopiert werden können. Beispielsweise gehen beim Deep-Copy-Vorgang Funktionswerte verloren.

Frage

Wenn in tatsächlichen Projekten eine sekundäre gekapselte Komponente verwendet wird und einige Deep-Copy-Vorgänge von Attributwerten innerhalb der gekapselten Komponente ausgeführt werden, besteht eine hohe Wahrscheinlichkeit, dass einige Daten verloren gehen, da es sich bei dem übergebenen Attributwert um einen Referenztypwert handelt.

Beispiel

Nehmen Sie als Beispiel die ak-table-Komponente, die auf der el-table-Kapselung basiert:

Übergeben Sie das Zeilenschlüsselattribut an die ak-table-Komponente. Dieses Attribut kann eine Funktion übergeben: Function(row). Einzelheiten finden Sie in der offiziellen Dokumentation.

Nach normaler Logik sollte der an ak-table übergebene Attributwert unverändert an die Komponente el-table übergeben werden, aber hier ist etwas Merkwürdiges passiert. Die von uns übergebene Funktion ist in der Komponente verschwunden!

Problemanalyse

Übergeben Sie zunächst den Wert des Zeilenschlüsselattributs von ak-table, bei dem es sich um eine Funktion handelt, also einen Referenztypwert. Wenn dann gemäß dem, was am Anfang des Artikels gesagt wurde, ein allgemeiner Deep-Copy-Vorgang für einen Referenztypwert ausgeführt wird, gehen Daten wie Funktionen und Arrays verloren.

Suchen Sie in ak-table nach dem Attribut row-key. Da es nicht in props definiert ist, sollte es im attrs-Attribut der Komponente gespeichert werden. Gehen Sie zur gemounteten Methode und drucken Sie das attrs-Attribut. Gehen Sie zur gemounteten Methode und drucken Sie den Wert der Attrs aus, um den Datenvergleich vor und nach dem Kopieren anzuzeigen.

Konsolenausgabe

———————————————————————————————————————

Das Problem ist hier sehr klar. Zunächst möchte die ak-table-Komponente den übergebenen Attributwert tatsächlich initialisieren und führt dann einen Deep-Copy-Vorgang für $attrs aus. Nach dem Kopieren geht der Zeilenschlüsselattributwert verloren, was zu Datenverlust führt.

Lösung

Für den Wert des übergebenen Referenztyps empfängt die untergeordnete Komponente den Wert direkt von der übergeordneten Komponente über das Props-Attribut, verarbeitet den übergebenen Wert dann nicht und verwendet ihn direkt.

Für die übergebenen Werte vom Referenztyp ist beim Kopieren eine Sonderbehandlung erforderlich und die benötigten Attributwerte sind rekursiv in die neue Variable zu kopieren.

Zusammenfassen

Das Verständnis der grundlegenden Typen und Referenztypen in JavaScript sowie das Kopieren von Referenztypwerten sind für uns grundlegende Fähigkeiten, um mit dieser Sprache voranzukommen. Manchmal glauben Leute aus Unachtsamkeit, dass sie durch das einfache und grobe Kopieren einer Variablen eine vollständige Kopie davon erhalten, was dazu führt, dass einige Daten „verschwinden“. Zu diesem Zeitpunkt können Sie sich die Lösung im Artikel ansehen. Dies ist ein Problem, auf das ich bei der Projektentwicklung gestoßen bin. Ich zeichne es hier auf und hoffe, dass es Ihnen hilfreich sein wird.

Damit ist dieser Artikel zur Analyse und Lösung von Datenverlusten während der Übertragung von Vue-Komponentenwerten abgeschlossen. Weitere relevante Inhalte zum Thema Verlust von Vue-Komponentenwerten finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Referenzlink: Einige Fallstricke von JavaScript Deep Copy

Das könnte Sie auch interessieren:
  • Vue implementiert 3 Möglichkeiten zum Wechseln zwischen Registerkarten und zum Beibehalten des Datenstatus
  • Implementierung einer Großbilddarstellung der Datenvisualisierung basierend auf vue+echarts
  • Implementierung der Drag-Datenvisualisierungsfunktion in Vue basierend auf Echarts
  • Vue ruft die Daten ab, kann sie aber nicht auf der Seite darstellen
  • Die Antd-Vue-Tabellenkomponente fügt ein Klickereignis hinzu, um auf eine Datenzeile zu klicken (Tutorial)
  • vue+echarts+datav Datenanzeige auf großem Bildschirm und Implementierung einer Drilldown-Funktion für Provinzen, Städte und Landkreise auf einer Karte Chinas
  • In Vuex aufgetretene Fallstricke, Vuex-Datenänderungen, Seiten-Rendering-Vorgänge in Komponenten
  • Vue implementiert Datenaustausch- und Änderungsvorgänge zwischen zwei Komponenten
  • Eine kurze Analyse der grundlegenden Implementierung von Vue-Erkennungsdatenänderungen

<<:  Probleme mit Index und FROM_UNIXTIME in MySQL

>>:  Vergleich von mydumper und mysqldump in MySQL

Artikel empfehlen

Lösung für den Fehler beim Importieren von MySQL Big Data in Navicat

Die von Navicat exportierten Daten können nicht i...

So erzielen Sie mit three.js einen dynamischen 3D-Texteffekt

Vorwort Hallo zusammen, hier ist der CSS-Assisten...

So fragen Sie doppelte Daten in einer MySQL-Tabelle ab

INSERT INTO hk_test(Benutzername, Passwort) VALUE...

MySQL Serie 13 MySQL-Replikation

Inhaltsverzeichnis 1. Mit der MySQL-Replikation v...

Verwenden von jQuery zum Implementieren des Karusselleffekts

Was ich Ihnen heute zeige, ist die Verwendung von...

So verwenden Sie dynamische Parameter und berechnete Eigenschaften in Vue

1. Dynamische Parameter Ab 2.6.0 können Sie einen...

JS-Code zum Erzielen eines Seitenwechseleffekts

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Bereitstellung des Alibaba Cloud Servers (grafisches Tutorial)

Ich habe vor Kurzem Front-End- und Back-End-Techn...

Detaillierte Erklärung der CSS-Float-Eigenschaft

1. Was ist Floating? Floaten bedeutet, wie der Na...

Vuex in einem Artikel verstehen

Inhaltsverzeichnis Überblick Die vier Hauptobjekt...