Bevor wir über die Datenreaktivität sprechen, müssen wir ein sehr wichtiges Problem lösen: Was genau macht Vue mit den Daten? Beginnen wir mit Gettern und Settern, die wir zum Lesen und Schreiben virtueller Eigenschaften verwenden. Getter und SetterEs gibt den folgenden Code lass obj0 = { Nachname: "高", Name: "Yuan Yuan", Alter: 18 }; // Anforderung 1, den Namen abrufen let obj1 = { Nachname: "高", Name: "Yuan Yuan", Name() { gib diesen Nachnamen + diesen Namen zurück; }, Alter: 18 }; console.log("Anforderung 1: " + obj1.Name()); //Gao Yuanyuan Zu diesem Zeitpunkt ist das Ergebnis unserer Abmeldung Gao Yuanyuan, was jeder verstehen kann, aber können die Klammern nach dem Namen gelöscht werden? Nein, da es sich um eine Funktion handelt. Wie entfernen wir also die Klammern? Hier sind unsere Anforderungen // Anforderung 2: Der Name kann ohne Klammern ermittelt werden let obj2 = { Nachname: "高", Name: "Yuan Yuan", getName() { gib diesen Nachnamen + diesen Namen zurück; }, Alter: 18 }; console.log("Anforderung 2: " + obj2.Name); //Gao Yuanyuan Dieses Mal verwenden wir einen Getter und können den Wert ohne Klammern abrufen. Wie ändern wir also den Namen? // Anforderung 3: Der Name kann geschrieben werden let obj3 = { Nachname: "高", Name: "Yuan Yuan", getName() { gib diesen Nachnamen + diesen Namen zurück; }, Name festlegen(xxx){ dieser.Nachname = xxx[0] dieser.name = xxx.slice(1) }, Alter: 18 }; obj3.Name = "Gao Yuanyuan" console.log(`Anforderung 3: Nachname ${obj3.last name}, Vorname ${obj3.first name}`) // Gao Yuanyuan Wo es „get“ gibt, gibt es auch „set“, und so wird „setter“ verwendet. Wir verwenden den Attributwert = xxx, um die Set-Funktion auszulösen, und der Name kann geschrieben werden. Wenn wir jedoch Warum wird Objekt.defineProperty Im obigen Beispiel verwenden wir get und set direkt beim Definieren des Objekts, aber wie fügen wir get weiterhin hinzu, wenn das Objekt deklariert wurde? Wir müssen var _xxx = 0 Objekt.defineProperty(obj3,'xxx',{ erhalten(){ Rückgabewert _xxx }, setze(Wert){ _xxx= Wert } }) Als nächstes können wir das ursprüngliche Problem lösen: Was genau macht Vue mit den Daten? Schauen wir uns einige Beispiele an: lass data0 = { n: 0 } Deklarieren Sie zuerst ein data0, Anforderung 1: Definieren Sie n mit lass data1 = {} Objekt.defineProperty(data1, 'n', { Wert: 0 }) console.log(`Anforderung 1: ${data1.n}`) //Anforderung 1: 0 Anforderung 2: n kann nicht kleiner als 0 sein: lass data2 = {} data2._n = 0 // _n wird verwendet, um den Wert von n geheim zu speichern, der Standardwert ist 0 Objekt.defineProperty(data2, 'n', { erhalten(){ gib dies zurück._n }, setze(Wert){ wenn(Wert < 0) return this._n = Wert } }) console.log(`Anforderung 2: ${data2.n}`)//0 Daten2.n = -1 console.log(`Anforderung 2: ${data2.n} ist auf -1 gesetzt und schlägt fehl`) //0 ist auf -1 gesetzt und schlägt fehl data2.n = 1 console.log(`Anforderung 2: ${data2.n} wird auf 1 gesetzt. Erfolg`) //0 wird auf 1 gesetzt. Erfolg Was aber, wenn die andere Partei let data3 = proxy({ data:{n:0} }) // Die Klammern sind anonyme Objekte und können nicht aufgerufen werden function proxy({data}){ const obj = {} // Das 'n' ist hier fest codiert. Theoretisch sollte es alle Schlüssel der Daten durchlaufen. Ich habe es hier vereinfacht // weil ich befürchte, dass Sie Object.defineProperty(obj, 'n', { nicht verstehen können. erhalten(){ Daten zurückgeben.n }, setze(Wert){ wenn(Wert<0)zurück data.n = Wert } }) return obj // obj ist der Proxy} // data3 ist obj console.log(`Anforderung 3: ${data3.n}`) Daten3.n = -1 console.log(`Anforderung 3: ${data3.n}, auf -1 setzen fehlgeschlagen`) Daten3.n = 1 console.log(`Anforderung 3: ${data3.n}, auf 1 gesetzt, Erfolg`) Was aber, wenn Sie keinen Agenten beauftragen möchten? lass meineDaten = {n:0} let data4 = proxy({ data:myData }) // Das Objekt in den Klammern ist anonym und kann nicht aufgerufen werden // data3 ist obj console.log(`Argumentativ: ${data4.n}`) //0 meineDaten.n = -1 console.log(`Argumentativ: ${data4.n}, auf -1 setzen fehlgeschlagen!?`) Da myData immer noch auf diese Weise geändert werden kann, haben wir eine weitere Anforderung: Auch wenn der Benutzer myData ohne Autorisierung ändert, müssen wir dies abfangen: lass myData5 = {n:0} let data5 = proxy2({ data:myData5 }) // Die Klammern sind anonyme Objekte und können nicht aufgerufen werden function proxy2({data}){ // Das 'n' ist hier fest codiert. Theoretisch sollten wir alle Schlüssel der Daten durchlaufen, aber wir vereinfachen es hier. let value = data.n //Speichern Sie das Start-n Object.defineProperty(data, 'n', {//Deklariere ein neues n erhalten(){ Rückgabewert }, setze(neuerWert){ wenn(neuerWert<0)return Wert = neuerWert } }) Fügen Sie einfach die obigen Sätze hinzu, diese Sätze überwachen Daten const obj = {} Objekt.defineProperty(obj, 'n', { erhalten(){ Daten zurückgeben.n }, setze(Wert){ if(value<0)return//Dieser Satz enthält redundante Daten.n = value } }) return obj // obj ist der Proxy} // data3 ist obj console.log(`Anforderung 5: ${data5.n}`) //0 meineDaten5.n = -1 console.log(`Anforderung 5: ${data5.n}, auf -1 setzen fehlgeschlagen`) //0 meineDaten5.n = 1 console.log(`Anforderung 5: ${data5.n}, erfolgreich auf 1 gesetzt`) //1 Wenn wir
Dann können wir zum Titel zurückkehren: Was ist Datenreaktivität? Ein Objekt ist responsiv, wenn es auf äußere Reize reagieren kann. Die Daten von Vue reagieren. In Oben finden Sie eine detaillierte Zusammenfassung der Vue-Datenreaktionsfähigkeit. Weitere Informationen zur Vue-Datenreaktionsfähigkeit finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Grundkenntnisse zu MySQL – Lernhinweise
1. Bereiten Sie eine neue Festplatte vor und form...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis So reduzieren Sie ein Array 1....
Inhaltsverzeichnis Vorwort Kommunikation zwischen...
einführen Haben Sie schon einmal einen ganzen Tag...
Berechnete Eigenschaften Manchmal packen wir zu v...
Voraussetzung: Das Webentwickler-Plugin wurde inst...
Docker fragt Bilder in einem privaten Register ab...
1. Laden Sie die Software herunter 1. Gehen Sie a...
Inhaltsverzeichnis MySQL-Löschsyntax-Aliasproblem...
Inhaltsverzeichnis Vorwort Einführung in Closures...
Inhaltsverzeichnis 1. Was ist scrapy_splash? 2. D...
1. Installieren Sie eine virtuelle Maschine (phys...
Die Lösung für das Problem, dass Navicat keine Re...
Inhaltsverzeichnis 1. Einleitung 2. Installieren ...