Heim Web-Frontend Front-End-Fragen und Antworten Welche Methoden gibt es zum Initialisieren von Daten in Vue?

Welche Methoden gibt es zum Initialisieren von Daten in Vue?

Dec 26, 2022 pm 06:09 PM
vue vue3

Vue bietet zwei Möglichkeiten, Daten zu initialisieren: 1. Objektmethode, Syntax „var data = { Schlüssel-Wert-Paar }“ 2. Funktionsmodus, Syntax „data: function () {return { Schlüssel-Wert-Paar }}“ . Es ist zu beachten, dass die Dateninitialisierung in Komponenten und Erweiterungen kein Objekt sein kann, da sonst ein Fehler gemeldet wird. Der Zweck der Verwendung des Funktionsmodus für Daten in Komponenten besteht darin, zu verhindern, dass mehrere Komponenteninstanzobjekte dieselben Daten gemeinsam nutzen und eine Datenverschmutzung verursachen.

Welche Methoden gibt es zum Initialisieren von Daten in Vue?

Die Betriebsumgebung dieses Tutorials: Windows7-System, Vue3-Version, DELL G3-Computer.

Vue-Daten verfügen über zwei Initialisierungsmethoden, Funktion und Objekt, aber welche Szenarien sind für diese beiden Situationen anwendbar? Kann es universell sein? Lassen Sie uns diese beiden Fragen gemeinsam analysieren. Dateninitialisierung offizielle Website-Demo Es wird betont, dass das Objekt nicht für die Dateninitialisierung in Extend verwendet werden kann. Warum also?

Quellcode-Analyse

Laut der offiziellen Website-Demo kann die Dateninitialisierung in Vue.extend kein Objekt sein. Was passiert, wenn wir das Schreiben als Objekt erzwingen?

// 代码来源于官网示例

// 第一种定义方式
var data = { a: 1 }

// 直接创建一个实例
var vm = new Vue({
  data: data
})

// Vue.extend() 中 data 必须是函数
var Component = Vue.extend({
// 第二种定义方式
  data: function () {
    return { a: 1 }
  }
})
Nach dem Login kopieren
    Nach dem Ausführen meldet die Chrome-Konsole direkt einen Fehler. Die Informationen lauten wie folgt:
  • var Component = Vue.extend({
      data: { a: 1 }
    })
    Nach dem Login kopieren

    Durch die Analyse des Quellcodes und der Fehlermeldung führt Vue.extend beim Auslösen einen Zusammenführungsvorgang durch und kombiniert eine grundlegende Komponente (innerhalb). vmode, Übersetzung usw.) mit Die von Ihnen in Extend definierten Informationen werden über mergeField in Optionen zusammengeführt. Beim Zusammenführen in Daten wird strats.data ausgelöst, das prüft, ob es sich bei den Daten um eine Funktion handelt Hier finden Sie Filter, Komponenten usw. Die Daten folgen zwei Sätzen von Zusammenführungsprozessen. Weitere Informationen finden Sie in den folgenden Codekommentaren:

    vue.esm.js?efeb:591 [Vue warn]: The "data" option should be a function that returns a per-instance value in component definitions.
    Nach dem Login kopieren
  • Andere Situationen: Tatsächlich handelt es sich bei unserem obigen Code nur um einen einfachen Prozess In der tatsächlichen Entwicklung gibt es ähnliche Situationen: Innerhalb von Unterkomponenten können Daten nicht als Objekt in der Route definiert werden, da sie alle unten die Methode mergeOptions aufrufen. Wann kann sie als Objekt definiert werden? ist die Bedeutung von

    // vue.extend 源码地址https://github.com/vuejs/vue/blob/dev/src/core/global-api/extend.js
    
      Vue.extend = function (extendOptions: Object): Function {
      ...
      // 在这里会触发mergeOptions方法
      Sub.options = mergeOptions(
          Super.options,
          extendOptions
        )
      ...
    }
    
    // mergeOptions 源码地址https://github.com/vuejs/vue/blob/dev/src/core/util/options.js
    
    export function mergeOptions (
      parent: Object,
      child: Object,
      vm?: Component
    ): Object {
      ...
    
      const options = {}
      let key
      // parent对象内包含components、filter,、directive
      for (key in parent) {
        mergeField(key)
      }
      // child对象内对应的是Vue.extend内定义的参数
      for (key in child) {
        if (!hasOwn(parent, key)) {
          mergeField(key)
        }
      }
      function mergeField (key) {
      // 这一步是根据传入的key找到不同的合并策略filter、components、directives用到合并策略是这个方法mergeAssets和data用到的不一样,当合并到data的时候会进入专属的合并策略方法内
        const strat = strats[key] || defaultStrat
        options[key] = strat(parent[key], child[key], vm, key)
      }
    }
    
    // strats.data  源码地址https://github.com/vuejs/vue/blob/dev/src/core/util/options.js
    strats.data = function (
      parentVal,
      childVal,
      vm
    ) {
      if (!vm) {
      // 如果data不是function的话会直接走下面的报错信息
        if (childVal && typeof childVal !== 'function') {
          process.env.NODE_ENV !== 'production' && warn(
            'The "data" option should be a function ' +
            'that returns a per-instance value in component ' +
            'definitions.',
            vm
          );
    
          return parentVal
        }
        return mergeDataOrFn(parentVal, childVal)
      }
    
      return mergeDataOrFn(parentVal, childVal, vm)
    };
    Nach dem Login kopieren

ok, oben wurde schon so viel gesagt, welchen Sinn hat es also, das zu tun? Warum können diese Situationen nicht als Objekte definiert werden? Um diese Frage zu beantworten, müssen Sie auf JS selbst zurückgreifen. Wie wir alle wissen, sind JS-Datentypen in Referenz- und Basistypen unterteilt Hier erklärt

new Vue({
  data: {
    linke: '//sinker.club'
  }
})
Nach dem Login kopieren
Der obige Code spiegelt ein Problem wider, da sowohl obj3 als auch obj2 auf eine Adresse im Speicher verweisen, sodass sich die Änderung von obj2 auf obj3 auswirkt. Natürlich kann Deep Copy verwendet werden, um dieses Problem zu lösen

JSON.parse(JSON.stringify(obj))

deepClone(obj)

Diese beiden Methoden erfordern jedoch jedes Mal eine Entwicklung oder eine tiefe Kopie des Frameworks Leistungsfreundlich. Wie macht Vue das? Definieren Sie Daten als Funktion

  var obj = {link: '//www.sinker.club'}
  var obj2 = obj
  var obj3 = obj
  obj2.link = "//gitlab.sinker.club"
  console.log(obj3.link) // "//gitlab.sinker.club"
Nach dem Login kopieren

Warum machen Sie das? Was ist das Lösungsszenario?

Wenn ich beispielsweise eine Unterkomponente definiere, werden die Daten als Objekt definiert. Auf diese Komponente wird an mehreren Stellen verwiesen. Wenn einer der Daten, die auf diese Komponente verweisen, geändert wird, führt dies dazu, dass die anderen Daten, die auf diese Komponente verweisen, geändert werden gleichzeitig geändert werden. Ändern, beenden.

Erweitertes Wissen:

Bei der Definition der Vue-Instanz kann das Datenattribut entweder ein Objekt oder eine Funktion sein

function data() {
  return {
   link: '//sinker.club'
  }
}

var obj = test()
var obj2 = test()

obj2.link ="//gitlab.sinker.club"
console.log(obj.link) '//sinker.club'
Nach dem Login kopieren
Das in der Komponente definierte Datenattribut nur eine Funktion sein Um die Wiederverwendung von Daten zu verhindern, definieren Sie sie als Funktion.

Die Daten in der Vue-Komponente sollten voneinander isoliert sein und sich nicht gegenseitig beeinflussen. Bei jeder Wiederverwendung der Komponente sollten die Datendaten einmal kopiert werden Wenn die Komponente kopiert wird, sind die Daten anderer wiederverwendeter lokaler Komponenten nicht betroffen. Daher müssen Sie über die Datenfunktion ein Objekt als Status der Komponente zurückgeben.
  • Wenn wir die Daten in die Komponente als Funktion schreiben, werden die Daten in Form eines Funktionsrückgabewerts definiert, sodass bei jeder Wiederverwendung der Komponente neue Daten mit einem eigenen Gültigkeitsbereich zurückgegeben werden, ähnlich wie bei Durch Angabe jeder Komponenteninstanz wird ein privater Datenraum erstellt, sodass jede Komponenteninstanz ihre eigenen Daten verwalten kann.
  • Wenn das Datum unserer Komponente einfach in Objektform geschrieben wird, verwenden diese Instanzen denselben Konstruktor. Aufgrund der Eigenschaften von JavaScript teilen alle Komponenteninstanzen dieselben Daten, was zu einer Änderung und allen Änderungen führt.

【Verwandte Empfehlungen: vuejs-Video-Tutorial, Web-Front-End-Entwicklung

Das obige ist der detaillierte Inhalt vonWelche Methoden gibt es zum Initialisieren von Daten in Vue?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So verwenden Sie Bootstrap in Vue So verwenden Sie Bootstrap in Vue Apr 07, 2025 pm 11:33 PM

Die Verwendung von Bootstrap in Vue.js ist in fünf Schritte unterteilt: Startstrap installieren. Bootstrap in main.js. Verwenden Sie die Bootstrap -Komponente direkt in der Vorlage. Optional: benutzerdefinierter Stil. Optional: Verwenden Sie Plug-Ins.

So fügen Sie Funktionen zu Schaltflächen für Vue hinzu So fügen Sie Funktionen zu Schaltflächen für Vue hinzu Apr 08, 2025 am 08:51 AM

Sie können der VUE -Taste eine Funktion hinzufügen, indem Sie die Taste in der HTML -Vorlage an eine Methode binden. Definieren Sie die Methode und schreiben Sie die Funktionslogik in der VUE -Instanz.

So verwenden Sie Watch in Vue So verwenden Sie Watch in Vue Apr 07, 2025 pm 11:36 PM

Mit der Watch -Option in Vue.js können Entwickler auf Änderungen in bestimmten Daten anhören. Wenn sich die Daten ändert, löst sich eine Rückruffunktion aus, um Aktualisierungsansichten oder andere Aufgaben auszuführen. Zu den Konfigurationsoptionen gehören unmittelbar, die festlegen, ob ein Rückruf sofort ausgeführt werden soll, und Deep, das feststellt, ob Änderungen an Objekten oder Arrays rekursiv anhören sollen.

Was bedeutet VUE Multi-Page-Entwicklung? Was bedeutet VUE Multi-Page-Entwicklung? Apr 07, 2025 pm 11:57 PM

VUE Multi-Page-Entwicklung ist eine Möglichkeit, Anwendungen mithilfe des Vue.js-Frameworks zu erstellen, in dem die Anwendung in separate Seiten unterteilt ist: Code-Wartung: Die Aufteilung der Anwendung in mehrere Seiten kann das Verwalten und Wartungsbereich erleichtern. Modularität: Jede Seite kann als separates Modul für eine einfache Wiederverwendung und den Austausch verwendet werden. Einfaches Routing: Die Navigation zwischen Seiten kann durch einfache Routing -Konfiguration verwaltet werden. SEO -Optimierung: Jede Seite hat eine eigene URL, die SEO hilft.

So verweisen Sie auf die JS -Datei mit Vue.js So verweisen Sie auf die JS -Datei mit Vue.js Apr 07, 2025 pm 11:27 PM

Es gibt drei Möglichkeiten, sich auf JS -Dateien in Vue.js zu beziehen: Geben Sie den Pfad direkt mit dem & lt; Skript & gt an. Etikett;; Dynamischer Import mit dem montierten () Lebenszyklushaken; und importieren über die Vuex State Management Library.

So kehren Sie von Vue zur vorherigen Seite zurück So kehren Sie von Vue zur vorherigen Seite zurück Apr 07, 2025 pm 11:30 PM

VUE.JS hat vier Methoden, um zur vorherigen Seite zurückzukehren: $ router.go (-1) $ router.back () verwendet & lt; Router-Link to = & quot;/& quot; Komponentenfenster.history.back () und die Methodenauswahl hängt von der Szene ab.

So verwenden Sie Vue Traversal So verwenden Sie Vue Traversal Apr 07, 2025 pm 11:48 PM

Es gibt drei gängige Methoden für Vue.js, um Arrays und Objekte zu durchqueren: Die V-für-Anweisung wird verwendet, um jedes Element zu durchqueren und Vorlagen zu rendern; Die V-Bind-Anweisung kann mit V-für dynamisch Attributwerte für jedes Element verwendet werden. und die .MAP -Methode kann Array -Elemente in Neuarrays umwandeln.

Wie man zum Div von Vue springt Wie man zum Div von Vue springt Apr 08, 2025 am 09:18 AM

Es gibt zwei Möglichkeiten, Divelemente in Vue zu springen: Verwenden Sie Vue Router und fügen Sie Router-Link-Komponente hinzu. Fügen Sie den @click Event -Listener hinzu und nennen Sie dies. $ Router.push () Methode zum Springen.

See all articles