Detaillierte Erklärung inkompatibler Änderungen von Komponenten in vue3

Detaillierte Erklärung inkompatibler Änderungen von Komponenten in vue3

Funktionale Komponenten

Das funktionale Attribut in der Single File Component (SFC) <template> wurde entfernt
Die Option { functional: true } beim Erstellen von Komponenten über Funktionen wurde entfernt

// Verwenden Sie die Komponente <dynamic-heading>, die für die Bereitstellung der entsprechenden Überschrift (also h1, h2, h3 usw.) verantwortlich ist. In 2.x würde dies wahrscheinlich als einzelne Dateikomponente geschrieben werden:
// Vue 2 Funktionskomponente Beispiel export default {
 funktional: wahr,
 Requisiten: ['Level'],
 render(h, { Eigenschaften, Daten, untergeordnete Elemente }) {
 returniere h(`h${props.level}`, Daten, untergeordnete Elemente)
 }
}

// Vue 2 Funktionskomponentenbeispiel mit <template>
<funktionale Vorlage>
 <Komponente
 :ist="`h${props.level}`"
 v-bind="attrs"
 v-on="Zuhörer"
 />
</Vorlage>

<Skript>
Standard exportieren {
 Requisiten: ['Level']
}
</Skript>

Jetzt werden in Vue 3 alle funktionalen Komponenten mit normalen Funktionen erstellt. Mit anderen Worten besteht keine Notwendigkeit, die Komponentenoption { functional: true } zu definieren.
Sie erhalten zwei Parameter: Requisiten und Kontext. Der Kontextparameter ist ein Objekt, das die Attribute, Slots und Emit-Eigenschaften der Komponente enthält.
Darüber hinaus wird h jetzt global importiert, anstatt es implizit in der Renderfunktion bereitzustellen.
Am Beispiel der zuvor erwähnten Komponente <dynamic-heading> sieht es jetzt so aus.

//vue3.0
importiere { h } von 'vue'
const DynamicHeading = (Eigenschaften, Kontext) => {
 returniere h(`h${props.level}`, Kontext.attrs, Kontext.slots)
}
DynamicHeading.props = ['Ebene']
Standardmäßige dynamische Überschrift exportieren
// Vue3.0 einzelne Datei schreiben <template>
 <Komponente
 v-bind:is="`h${$props.level}`"
 v-bind="$attrs"
 />
</Vorlage>

<Skript>
Standard exportieren {
 Requisiten: ['Level']
}
</Skript>

Der Hauptunterschied ist

Das funktionale Attribut zum Entfernen von Listenern in <template> wird nun als Teil von $attrs übergeben und kann entfernt werden

So schreiben Sie asynchrone Komponenten und die Methode „defineAsyncComponent“

Verwenden Sie nun die Hilfsmethode defineAsyncComponent, um asynchrone Komponenten explizit zu definieren
Komponentenoption in Loader umbenannt
Die Loader-Funktion selbst akzeptiert keine Resolve- und Rejuct-Parameter mehr und muss ein Promise zurückgeben.

// vue2.x
// Bisher wurden asynchrone Komponenten erstellt, indem die Komponente als Funktion definiert wurde, die ein Promise zurückgibt const asyncPage = () => import('./NextPage.vue')
// Oder als Option erstellen const asyncPage = {
 Komponente: () => import('./NextPage.vue'),
 Verzögerung: 200,
 Zeitüberschreitung: 3000,
 Fehler: ErrorComponent,
 wird geladen: Komponente wird geladen
}

// vue3.x
In vue3.x müssen Sie defineAsyncComponent verwenden, um import{ defineAsyncComponent } von „vue“ zu definieren.
Importiere ErrorComponent aus „./components/ErrorComponent.vue“
importiere LoadingComponent aus './components/LoadingComponent.vue'

// Definitionsmethode ohne Optionen const asyncPage = defineAsyncComponent(() => import('./NextPage.vue'))

// Asynchrone Komponente mit Optionen constasyncPageWithOptions = defineAsyncCopmonent({
 Lader: () => import('./NextPage.vue'),
 Verzögerung: 200,
 Zeitüberschreitung: 3000,
 Fehlerkomponente: Fehlerkomponente,
 Komponente wird geladen: Komponente wird geladen
})

Die Loader-Funktion akzeptiert keine Resolve- und Reject-Parameter mehr und muss immer ein Promise zurückgeben.

// vue2.x
const oldAsyncComponent = (auflösen, ablehnen) => {}
// vue3.x
const asyncComponent = defineAsyncComponent(() => neues Promise((auflösen, ablehnen) => {}))

Komponentenereignisse müssen in der Option „Emits“ deklariert werden.

Vue3 bietet jetzt eine Emit-Option, die der Props-Option ähnelt. Mit dieser Option können Ereignisse definiert werden, die Komponenten an ihre übergeordneten Objekte senden.

<!-- vue2.x -->
<Vorlage>
 <div>
 <p>{{ text }}</p>
 <button v-on:click="$emit('accepted')">OK</button>
 </div>
</Vorlage>
<Skript>
 Standard exportieren {
 Requisiten: ['Text']
 }
</Skript>

<!-- vue3.x -->
<!-- Ähnlich wie bei Props können Ems nun verwendet werden, um von Komponenten emittierte Ereignisse zu definieren-->
<!-- Diese Option empfängt auch ein bestimmtes Objekt, das zur Validierung der übergebenen Parameter wie Requisiten verwendet wird-->
<!-- Es wird dringend empfohlen, alle Emission von jeder Komponente aufzuzeichnen, da ohne den Modifikator .native alle Listener für Ereignisse, die nicht mit deklariert wurden, in das $attr der Komponente aufgenommen werden, das standardmäßig an den Stammknoten der Komponente gebunden ist -->
<Vorlage>
 <div>
 <p>{{ text }}</p>
 <button v-on:click="$emit('accepted')">OK</button>
 </div>
</Vorlage>
<Skript>
 Standard exportieren {
 Requisiten: ['Text'],
 emittiert: ['akzeptiert']
 }
</Skript>

Oben finden Sie eine ausführliche Erläuterung der inkompatiblen Komponentenänderungen in vue3. Weitere Informationen zu inkompatiblen Komponentenänderungen in vue3 finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Ausführliche Erläuterung der Vue-Komponente „Multi-Select-Liste“
  • Probleme und Lösungen bei der Verwendung des V-Modells zum bidirektionalen Binden der Werte von übergeordneten und untergeordneten Komponenten in Vue
  • Vue-Beispielcode mit dem Animationseffekt „Übergangskomponente“
  • Zusammenfassung der Grundlagen der Vue-Komponenten
  • Tiefgreifendes Verständnis der dynamischen und asynchronen Komponenten von Vue
  • Schritte für Vue zur Verwendung von Ref, um Komponenten über Ebenen hinweg zu erhalten
  • Vue implementiert Multi-Tab-Komponente
  • Implementieren Sie ganz einfach den gesamten Prozess der Switch-Funktionskomponenten in vue3
  • So passen Sie Dialog- und Modalkomponenten in Vue3 an
  • Richtige Methode, um eine erneute Darstellung einer Komponente in Vue zu erzwingen
  • Zwei Möglichkeiten zum dynamischen Erstellen von Komponenten in Vue

<<:  Detaillierte Erklärung zum Wiederherstellen von Datenbankdaten über das MySQL-Binärprotokoll

>>:  Detaillierte Erläuterung des Nginx-Reverse-Generation-Beispiels für verteilten Mogilefs-Speicher

Artikel empfehlen

Nodejs-Fehlerbehandlungsprozessaufzeichnung

In diesem Artikel wird der Verbindungsfehler ECON...

Detaillierte Einführung in das CSS-Prioritätswissen

Bevor wir über die CSS-Priorität sprechen, müssen...

Detaillierte Erklärung der Abkürzung von State in React

Vorwort Was ist Staat Wir alle sagen, dass React ...

Detaillierte Erklärung der wechselseitigen Verwendung von Ref in React

Inhaltsverzeichnis 1. Lassen Sie uns zunächst erk...

Vue verwendet Openlayers zum Laden von Tiandi Map und Amap

Inhaltsverzeichnis 1. Weltkarte 1. Installieren S...

Einige wunderbare Verwendungsmöglichkeiten von URL-Objekten in JavaScript

Inhaltsverzeichnis Vorwort Parameter analysieren ...

Detaillierte Erklärung des Typschutzes in TypeScript

Inhaltsverzeichnis Überblick Typzusicherungen in ...

Implementierung eines einfachen Weihnachtsspiels mit JavaScript

Inhaltsverzeichnis Vorwort Ergebnisse erzielen Co...

Ändern des Standard-Bildlaufleistenstils im Front-End-Projekt (Zusammenfassung)

Ich habe viele Projekte geschrieben, bei denen de...

Detaillierte Erklärung des Kopierobjekts von jQuery

<!DOCTYPE html> <html lang="de"...

Tutorial zur grundlegenden Verwendung des MySQL Slow Query Log

Parameter im Zusammenhang mit dem langsamen Abfra...

Grundlegende Kenntnisse zur MySQL-Wurmreplikation

Würmer replizieren sich, wie der Name schon sagt,...

So konfigurieren Sie den Whitelist-Zugriff in MySQL

Schritte zum Konfigurieren des Whitelist-Zugriffs...