Detaillierte Erläuterung inkompatibler Änderungen an Rendering-Funktionen in Vue3

Detaillierte Erläuterung inkompatibler Änderungen an Rendering-Funktionen in Vue3

Änderungen an der Rendering-API

Diese Änderung betrifft keine <template>-Benutzer

  • h wird jetzt global importiert, anstatt als Argument an die Renderfunktion übergeben zu werden
  • Die Renderfunktionsparameter wurden geändert, um zwischen Stateful- und Funktionskomponenten konsistenter zu sein.
  • vnode hat jetzt eine flache Prop-Struktur

Renderfunktionsparameter

// 2.0 Rendering-Funktion export default {
 rendern(h) {
  return h('div')
 }
}

// 3.x-Syntax export default {
 rendern() {
  return h('div')
 }
}

Änderungen an der Renderfunktionssignatur

// 2.x
Standard exportieren {
 rendern(h) {
  return h('div')
 }
}

// 3.x
importiere { h, reaktiv } von 'vue'
Standard exportieren {
 setup(Eigenschaft, {Slots, Attribute, emit}) {
  const state = reaktiv({
   Anzahl: 0
  })
  Funktion Inkrement() {
   Zustand.Anzahl++
  }
  // Zurück zur Renderfunktion return () => h(
   'div',
   {
    bei Klick: Inkrement
   },
   Statusanzahl
  )
 }
}

Formatierung von VNode-Props

// 2.x
{
 Klasse: ['Schaltfläche', 'ist umrissen'],
 Stil: {Farbe: '#fffff'},
 attr: {id: 'senden'},
 domProps: {innerHTML: ''},
 auf: {click: submitForm},
 Schlüssel: 'Senden-Schaltfläche'
}
// 3.x VNode-Struktur ist flach {
 Klasse: ['Schaltfläche', 'ist umrissen'],
 Stil: { Farbe: '#34495E' },
 ID: "Senden",
 innerHTML: '',
 beim Klicken: Formular absenden,
 Schlüssel: 'Senden-Schaltfläche'
}

Slot-Vereinigung

Geänderte normale Slots und eingeschränkte Slots

  • this.$slots stellt jetzt Slots als Funktionen bereit
  • Entfernen Sie dies.$scopedSlots
// 2.x
h(LayoutComponent, [
 h('div', {slot: 'header'}, dieser.header),
 h('div', {slot: 'header'}, dieser.header)
])
// Bereichssteckplatz:


// 3.x
h(LayoutComponent, {}, {
 Header: () => h('div', dieser.Header),
 Inhalt: () => h('div', dieser.Inhalt)
})
// Wenn Sie Scoped Slots programmgesteuert einführen müssen, werden sie jetzt in der Option $slots vereinheitlicht // 2.x Scoped Slots
dies.$scopedSlots.header
// 3.x schreibe this.$slots.header

$listeners entfernen

Das $listeners -Objekt wurde in vue3 entfernt und Ereignis-Listener sind jetzt Teil von $attrs

In Vue2 können Sie this.attrs und this.attrs und this.listeners verwenden, um auf die Attribute und Ereignis-Listener zuzugreifen, die jeweils an die Komponente übergeben werden. In Kombination mit inheritAttrs: false können Entwickler diese Attribute und Listener auf andere Elemente statt auf das Stammelement anwenden.

<Vorlage>
<Bezeichnung>
 <Eingabetyp="Text" v-bind="$attrs" v-on="$listeners">
</Bezeichnung>
</Vorlage>
<Skript>
 Standard exportieren {
  inheritAttrs: false
 }
</Skript>

Im virtuellen DOM von Vue sind Ereignis-Listener jetzt nur noch Attribute mit dem Präfix „on“, was sie zu einem Teil des attrs-Objekts macht, sodass Listener entfernt werden.

<Vorlage>
 <Bezeichnung>
  <Eingabetyp="Text" v-bind="$attrs" />
 </Bezeichnung>
</Vorlage>
<Skript>
Standard exportieren {
 inheritAttrs: false
}
// Wenn diese Komponente ein ID-Attribut und einen v-on:close-Listener erhält, sieht das $attrs-Objekt nun folgendermaßen aus {
 ID: "meine Eingabe",
 onClose: () => console.log('Schließen-Ereignis ausgelöst')
}
</Skript>

$attrs umfasst jetzt Klasse und Stil

Jetzt enthält $attr alle Attribute, einschließlich Klasse und Stil

In 2.x behandelt das virtuelle DOM Klasse und Stil speziell, sodass sie nicht in $attr enthalten sind, was bei Verwendung von inheritAttr: false zu Nebenwirkungen führt.

  • Attribute in $attrs werden nicht mehr automatisch zum Stammelement hinzugefügt, sondern es liegt am Entwickler, zu entscheiden, wo sie hinzugefügt werden.
  • Klasse und Stil gehören jedoch nicht zu $attrs und werden dennoch auf das Stammelement der Komponente angewendet:
<Vorlage>
 <Bezeichnung>
  <Eingabetyp="Text" v-bind="$attrs" />
 </Bezeichnung>
</Vorlage>
<Skript>
Standard exportieren {
 inheritAttrs: false
}
</Skript>
<!-- Schreiben -->
<meine-Komponente id="meine-id" class="meine-klasse"></meine-Komponente>
<!-- vue2 wird generieren -->
<label class="meine-klasse">
 <input type="text" id="meine-id" />
</Bezeichnung>
<!-- vue3 wird generieren -->
<Bezeichnung>
 <input type="text" id="meine-id" class="meine-klasse" />
</Bezeichnung>

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

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Verwendung der Vue-Rendering-Funktion Render
  • Detaillierte Erläuterung der Vue-Rendering-Funktion
  • So verwenden Sie die JSX-Syntax richtig in Vue
  • Probleme und Lösungen bei der Verwendung der jsx-Syntax in React-vscode
  • Beispiel für die Verwendung von JSX zum Erstellen einer Komponentenparserentwicklung
  • So verwenden Sie JSX zum Implementieren von Karussellkomponenten (Front-End-Komponentenbildung)
  • Spezifische Verwendung der JSX-Syntax von Vue-Komponenten
  • Vue jsx-Nutzungshandbuch und Verwendung der jsx-Syntax in vue.js
  • Detaillierte Erklärung, wie Vue die JSX-Syntax unterstützt
  • Rendering-Funktion und JSX-Details

<<:  Detaillierte grafische Anweisungen zum Herunterladen und Installieren der entpackten Version von MySQL 5.7.18 und zum Starten des MySQL-Dienstes

>>:  So ermitteln Sie die Ausführungszeit eines Befehls oder Prozesses in Linux

Artikel empfehlen

Mehrere CSS3-Tag-Abkürzungen (empfohlen)

border-radius: CSS3 abgerundete Ecken Syntax: bor...

Detaillierte Erklärung des Vue2 Cube-UI-Zeitwählers

Inhaltsverzeichnis Vorwort 1. Anspruch und Wirkun...

Öffnen Sie den Windows-Server-Port (nehmen Sie als Beispiel Port 8080)

Was ist ein Port? Bei den Ports, auf die wir uns ...

So verwenden Sie fdisk zum Partitionieren der Festplatte in Linux

Häufig verwendete Befehle für Linux-Partitionen: ...

So fügen Sie Tastenkombinationen in Xshell hinzu

Als nützlicher Terminalemulator wird Xshell häufi...

Anfänger lernen einige HTML-Tags (3)

Anfänger, die mit HTML in Berührung kommen, lerne...

MySQL-String-Splitting-Beispiel (String-Extraktion ohne Trennzeichen)

String-Extraktion ohne Trennzeichen Fragenanforde...

Beispielcode zur Implementierung einer Hohlmaskenebene mit CSS

Inhalt dieses Artikels: Seitenhohlmaskenebene, Se...

Detailliertes Beispiel der Sortierfunktion field() in MySQL

Vorwort In unserem täglichen Entwicklungsprozess ...