Heim > Web-Frontend > Front-End-Fragen und Antworten > Vue-Reaktionsdaten reagieren nicht

Vue-Reaktionsdaten reagieren nicht

PHPz
Freigeben: 2023-05-24 09:24:07
Original
1382 Leute haben es durchsucht

Bei der Entwicklung mit Vue.js ist die am häufigsten verwendete Funktion die reaktionsfähige Datenbindung. Mit dieser Funktion können Entwickler eine automatische Synchronisierung zwischen Ansichten und Daten erreichen, indem sie Daten deklarieren und binden. Aber manchmal kann es vorkommen, dass wir auf ein Problem stoßen, bei dem die Antwortdaten von Vue nicht reagieren, was bedeutet, dass wir die Daten ändern, die Ansicht jedoch nicht aktualisiert wird. Dies ist ein häufiges Problem. Lassen Sie uns als Nächstes die möglichen Ursachen und Lösungen für dieses Problem besprechen.

  1. Der Datentyp unterstützt keine reaktive

Vue.js kann nur Eigenschaften erkennen, die vorhanden sind, wenn die Daten initialisiert werden. Wenn daher einige nicht reagierende Datentypen vorhanden sind, z. B. Map, Set, Symbol und andere Objekttypen, die als Requisiten dieser Komponente oder übergeordneten Komponente übergeben werden, gibt es für diese Datentypen keine Möglichkeit, reaktionsfähige Aktualisierungen auszulösen. In diesem Fall muss das Update manuell angestoßen werden. Verwenden Sie die Methode Vue.set oder Vm.$set, um manuell eine neue Antworteigenschaft festzulegen, zum Beispiel:

Vue.set(this.obj, 'propertyName', newValue)
Nach dem Login kopieren

oder

this.$set(this.obj, 'propertyName', newValue)
Nach dem Login kopieren
  1. hinzuzufügendes Objekt oder Array new Properties/ Vue.set oder this.$set wird bei der Verwendung von Elementen nicht verwendet. Bewirkt, dass die Ansicht neu gerendert wird, wenn sich Eigenschaften ändern. Beim Hinzufügen neuer Eigenschaften oder Elemente zu Objekten oder Arrays wird es Probleme geben, da Vue.js deren Änderungen nicht automatisch nachverfolgen kann. Wenn wir also einem Objekt ein neues Attribut oder einem Array ein neues Element hinzufügen, müssen wir die Methode Vue.set oder this.$set verwenden, um das Attribut oder Element manuell hinzuzufügen.
Zum Beispiel haben wir ein Array namens data und müssen ein neues Element hinzufügen:

this.data.push(newElement); // 这种方式添加的元素不会响应式更新
或者
this.data[this.data.length] = newElement; // 该方式同样不会响应式更新
Nach dem Login kopieren

Der richtige Weg ist, this.$set oder Vue.set zu verwenden: # 🎜🎜#
this.$set(this.data, this.data.length, newElement);
或者
Vue.set(this.data, this.data.length, newElement);
Nach dem Login kopieren

Dasselbe gilt auch für das Hinzufügen neuer Eigenschaften zu Objekten.

Das Objekt oder Array verwendet die Methode Object.freeze()

    Wenn das Objekt oder Array durch die Methode Object.freeze() eingefroren wird Methode, dann kann Vue.js gebundene Eigenschaften nicht ändern. Wenn Sie also diese Eigenschaften ändern müssen, müssen Sie die Fixierung manuell aufheben und Eigenschaften/Elemente hinzufügen, zum Beispiel:
  1. let obj = Object.freeze( {
      key: 'value'
    });
    let newValue = 'new value';
    obj.key = newValue; // 这种方式添加的属性不会响应式更新
    
    let newObj = {[...obj]} // 这样也不会响应式更新
    
    let unfrozenObj = {...obj}; // 解冻后再添加属性才会触发更新
    unfrozenObj.key = newValue;
    Nach dem Login kopieren
Eigenschaften für dasselbe Objekt häufig wechseln

#🎜 🎜##🎜🎜 #Wenn Eigenschaften häufig für dasselbe Objekt gewechselt werden, reagiert Vue.js möglicherweise nicht. Wenn Sie beispielsweise ein Attribut vom Typ Bool ändern, sollten Sie den Wert des Attributs zunächst manuell auf false und dann auf true setzen, z. B.:

this.boolAttr = false;
this.boolAttr = true;
Nach dem Login kopieren
  1. Einbettung von Objekten oder Arrays Die Anzahl der verschachtelten Ebenen ist zu tief. js kann es nicht verfolgen. Seine internen Eigenschaften haben sich geändert. Zu diesem Zeitpunkt können wir erwägen, berechnete Eigenschaften und Methoden zu verwenden, um dieses Problem zu lösen. Zum Beispiel:
  2. data: {
      deepChild: {
        deepChild1: {
          ...
        }
      }
    },
    
    computed: {
      deepChildProp: function() {
        return this.deepChild.deepChild1....;
      }
    },
    Nach dem Login kopieren
    Zusammenfassend lässt sich sagen, dass die oben genannten Situationen nicht auf Vue-Reaktionsdaten reagieren. Wenn wir uns mit ähnlichen Problemen befassen, müssen wir die Ursache des Problems im Voraus ermitteln und dann die entsprechende Lösung auswählen. Wir können die von Vue.js bereitgestellten Tools verwenden, um laufende Probleme zu diagnostizieren, unerwartete Updates manuell zu implementieren oder Daten in berechneten Eigenschaften und Methoden zu manipulieren. Wenn wir Vue.js verwenden, müssen wir die Prinzipien der responsiven Datenbindung vollständig verstehen, um schönen und effizienten Code schreiben zu können.

    Das obige ist der detaillierte Inhalt vonVue-Reaktionsdaten reagieren nicht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage