Wie die Vue3 Composition API Komponenten von Drittanbietern elegant kapselt
Vorwort
Wie kann man bei Komponenten von Drittanbietern die Funktionen elegant erweitern und gleichzeitig die ursprünglichen Funktionen der Komponenten von Drittanbietern (Requisiten, Ereignisse, Slots, Methoden) beibehalten?
Nehmen Sie den El-Input von Element Plus als Beispiel:
Es ist sehr wahrscheinlich, dass Sie schon einmal so gespielt haben, indem Sie eine MyInput-Komponente gekapselt und die Requisiten, Ereignisse, Slots und Methoden hinzugefügt haben, die Sie entsprechend Ihren eigenen verwenden möchten Schreiben Sie es noch einmal:
// MyInput.vue <template> <div class="my-input"> <el-input v-model="inputVal" :clearable="clearable" @clear="clear"> <template #prefix> <slot name="prefix"></slot> </template> <template #suffix> <slot name="suffix"></slot> </template> </el-input> </div> </template> <script setup> import { computed } from 'vue' const props = defineProps({ modelValue: { type: String, default: '' }, clearable: { type: Boolean, default: false } }) const emits = defineEmits(['update:modelValue', 'clear']) const inputVal = computed({ get: () => props.modelValue, set: (val) => { emits('update:modelValue', val) } }) const clear = () => { emits('clear') } </script>
Aber nach einiger Zeit ändern sich die Anforderungen und andere Funktionen der el-input-Komponente müssen zur MyInput-Komponente hinzugefügt werden. Eigenschaften, 5 Ereignisse und 4 Slots, was sollen wir tun? Das ist nicht nur umständlich, sondern hat auch eine schlechte Lesbarkeit.
In Vue2 können wir damit umgehen. Klicken Sie hier, um die Kapselung von Vue-Komponenten von Drittanbietern anzuzeigen.
Dieser Artikel soll Ihnen beim Wissenstransfer helfen und erkunden, wie Sie Vue3 CompositionAPI verwenden, um Komponenten von Drittanbietern elegant zu kapseln ~
1 . Für die Attribut-Requisiten und Ereignisse von Drittanbieter-Komponenten
in Vue2
$attrs: Enthält Attributbindungen (außer Klasse und Stil), die im übergeordneten Bereich nicht als Requisiten erkannt (und abgerufen) werden. Wenn eine Komponente keine Requisiten deklariert, werden alle übergeordneten Bereichsbindungen (außer Klasse und Stil) hier einbezogen, und interne Komponenten können über v-bind="$attrs"
$listeners: Included v- übergeben werden. auf dem Ereignis-Listener im übergeordneten Bereich (ohne .native-Modifikator). Es kann über v-on="$listeners"
und in Vue3
an interne Komponenten übergeben werden. $attrs: enthält Attributbindungen und Ereignisse im übergeordneten Bereich, die keine Komponenten-Requisiten oder benutzerdefinierten Ereignisse sind (einschließlich Klasse). , Stil und benutzerdefinierte Ereignisse) und interne Komponenten können über v-bind="$attrs" übergeben werden.
$listeners-Objekt wurde in Vue 3 entfernt. Ereignis-Listener sind jetzt Teil von $attrs.
Im
kann die Hilfsfunktion useAttrs $attrs abrufen.
//MyInput.vue <template> <div class="my-input"> <el-input v-bind="attrs"></el-input> </div> </template> <script setup> import { useAttrs } from 'vue' const attrs = useAttrs() </script>
Natürlich ist das nicht genug. Wenn Sie einfach so schreiben, funktionieren die von uns gebundenen Attribute (einschließlich Klasse und Stil) auch für das Stammelement (das obige Beispiel ist der Dom-Knoten mit class="my-input"). Um dieses Standardverhalten zu verhindern, müssen wir inheritAttrs auf false setzen.
Werfen wir einen Blick auf die Erklärung des Vue3-Dokuments zu inheritAttrs
Standardmäßig werden Attributbindungen im übergeordneten Bereich, die nicht als Requisiten erkannt werden, „zurückgegriffen“ und als normale HTML-Attribute auf das Stammelement von auf das untergeordnete Element angewendet die Komponente. Beim Schreiben einer Komponente, die ein Zielelement oder eine andere Komponente umschließt, entspricht dies möglicherweise nicht immer dem erwarteten Verhalten. Durch Festlegen von inheritAttrs auf „false“ werden diese Standardverhalten entfernt. Diese Attribute können durch die Instanzeigenschaft $attrs wirksam gemacht und über v-bind explizit an Nicht-Root-Elemente gebunden werden.
Wir können also den folgenden Code schreiben, um die Requisiten und Ereignisse von Komponenten von Drittanbietern zu verarbeiten:
// MyInput.vue <template> <div class="my-input"> <el-input v-bind="attrs"></el-input> </div> </template> <script> export default { name: 'MyInput', inheritAttrs: false } </script> <script setup> import { useAttrs } from 'vue' const attrs = useAttrs() </script>
2. Für die Slots von Komponenten von Drittanbietern
In Vue3
$slots: Wir können ihn verwenden Holen Sie sich den von der übergeordneten Komponente übergebenen Slot
$scopedSlots wurde in Vue3 entfernt und alle Slots werden als Funktionen über $slots verfügbar gemacht
Die Hilfsfunktion useSlots in
Wenn wir auf der Grundlage der oben genannten Punkte keine zusätzlichen Steckplätze für die Verpackung von Komponenten von Drittanbietern hinzufügen und sich die Steckplätze der Komponenten von Drittanbietern im selben Dom-Knoten befinden, haben wir dann auch eine knifflige Verpackungsmethode? ?? ?, erhalten Sie den Namen des Slots, indem Sie $slots durchlaufen, und fügen Sie dynamisch den Slot der Unterkomponente hinzu:
//MyInput.vue <template> <div class="my-input"> <el-input v-bind="attrs"> <template v-for="k in Object.keys(slots)" #[k] :key="k"> <slot :name="k"></slot> </template> </el-input> </div> </template> <script> export default { name: 'MyInput', inheritAttrs: false } </script> <script setup> import { useAttrs, useSlots } from 'vue' const attrs = useAttrs() const slots = useSlots() </script>
Wenn die oben genannten Bedingungen nicht erfüllt sind, müssen wir die Slots des erforderlichen Drittanbieters manuell hinzufügen Komponenten in der Unterkomponente ~
3. Methoden für Komponenten von Drittanbietern
Für Methoden von Komponenten von Drittanbietern implementieren wir diese über ref. Fügen Sie zunächst ein ref="elInputRef"-Attribut zur el-input-Komponente in der MyInput-Komponente hinzu und machen Sie dann elInputRef über defineExpose für die übergeordnete Komponente verfügbar.
Unterkomponente: MyInput.vue
// MyInput.vue <template> <div class="my-input"> <el-input v-bind="attrs" ref="elInputRef"> <template v-for="k in Object.keys(slots)" #[k] :key="k"> <slot :name="k"></slot> </template> </el-input> </div> </template> <script> export default { name: 'MyInput', inheritAttrs: false } </script> <script setup> import { useAttrs, useSlots } from 'vue' const attrs = useAttrs() const slots = useSlots() const elInputRef = ref(null) defineExpose({ elInputRef // <script setup>的组件里的属性默认是关闭的,需通过defineExpose暴露出去才能被调用 }) </script>
Übergeordnete Seite: Der Aufrufcode von Index.vue lautet wie folgt:
// Index.vue <template> <my-input v-model='input' ref="myInput"> <template #prefix>姓名</template> </my-input> </template> <script setup> import MyInput from './components/MyInput.vue' import { ref, onMounted } from 'vue' const input = ref('') const myInput = ref(null) // 组件实例 onMounted(()=> { myInput.value.elInputRef.focus() // 初始化时调用elInputRef实例的focus方法 }) </script>
Das obige ist der detaillierte Inhalt vonWie die Vue3 Composition API Komponenten von Drittanbietern elegant kapselt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Vue.js ist eng in den Front-End-Technologie-Stack integriert, um die Entwicklungseffizienz und die Benutzererfahrung zu verbessern. 1) Konstruktionstools: Integrieren Sie sich in Webpack und Rollup, um eine modulare Entwicklung zu erzielen. 2) Staatsmanagement: Integrieren Sie sich in Vuex, um den komplexen Anwendungsstatus zu verwalten. 3) Routing: Integrieren Sie sich in Vuerouter, um einseitige Anwendungsrouting zu realisieren. 4) CSS -Präprozessor: Unterstützt SASS und weniger, um die Stilentwicklungseffizienz zu verbessern.

Netflix wählte React, um seine Benutzeroberfläche zu erstellen, da die Komponentendesign und der virtuelle DOM -Mechanismus von React komplexe Schnittstellen und häufige Updates effizient verarbeiten können. 1) Komponentenbasiertes Design ermöglicht es Netflix, die Schnittstelle in überschaubare Widgets zu unterteilen und die Entwicklungseffizienz und Code-Wartbarkeit zu verbessern. 2) Der virtuelle DOM -Mechanismus sorgt für die Glätte und hohe Leistung der Netflix -Benutzeroberfläche durch Minimierung von DOM -Operationen.

Vue.js wird von Entwicklern geliebt, weil es einfach zu bedienen und mächtig ist. 1) Das reaktionsschnelle Datenbindungssystem aktualisiert die Ansicht automatisch. 2) Das Komponentensystem verbessert die Wiederverwendbarkeit und Wartbarkeit des Codes. 3) Computereigenschaften und Hörer verbessern die Lesbarkeit und Leistung des Codes. 4) Die Verwendung von Vodevtools und Überprüfung auf Konsolenfehler sind häufige Debugging -Techniken. 5) Die Leistungsoptimierung umfasst die Verwendung von Schlüsselattributen, berechneten Attributen und Keep-Alive-Komponenten. 6) Zu den Best Practices zählen eindeutige Komponentenbenennungen, die Verwendung von Einzeldateikomponenten und die rationale Verwendung von Lebenszyklushaken.

VUE.JS ist ein progressives JavaScript-Framework, das zum Aufbau effizienter und wartbarer Front-End-Anwendungen geeignet ist. Zu den wichtigsten Merkmalen gehören: 1. Responsive Datenbindung, 2. Komponentenentwicklung, 3. Virtual DOM. Durch diese Funktionen vereinfacht Vue.js den Entwicklungsprozess, verbessert die Anwendungsleistung und -wartbarkeit und macht ihn in der modernen Webentwicklung sehr beliebt.

Vue.js und reagieren jeweils ihre eigenen Vor- und Nachteile, und die Wahl hängt von den Projektanforderungen und den Teambedingungen ab. 1) Vue.js eignet sich aufgrund seiner Einfachheit und einfach zu bedienung für kleine Projekte und Anfänger. 2) React ist aufgrund seines reichhaltigen Ökosystem- und Komponentendesigns für große Projekte und komplexe Benutzeroberflächen geeignet.

Vue.js verbessert die Benutzererfahrung durch mehrere Funktionen: 1. Responsives System realisiert Echtzeitdaten-Feedback; 2. Die Komponentenentwicklung verbessert die Wiederverwendbarkeit des Codes; 3.. Vuerouter bietet eine reibungslose Navigation; 4. Dynamische Datenbindung und Übergangsanimation verbessern den Interaktionseffekt; 5. Fehlerverarbeitungsmechanismus sorgt für das Feedback der Benutzer. 6. Leistungsoptimierung und Best Practices verbessern die Anwendungsleistung.

Vue.js 'Rolle in der Webentwicklung besteht darin, als progressives JavaScript -Framework zu fungieren, das den Entwicklungsprozess vereinfacht und die Effizienz verbessert. 1) Es ermöglicht Entwicklern, sich auf Geschäftslogik durch reaktionsschnelle Datenbindung und Komponentenentwicklung zu konzentrieren. 2) Das Arbeitsprinzip von Vue.js beruht auf reaktionsschnellen Systemen und virtuellem DOM, um die Leistung zu optimieren. 3) In den tatsächlichen Projekten ist es üblich, Vuex zu verwenden, um den globalen Zustand zu verwalten und die Datenreaktionsfähigkeit zu optimieren.

Vue.js ist ein progressives JavaScript -Framework, das von Ihnen Yuxi im Jahr 2014 veröffentlicht wurde, um eine Benutzeroberfläche zu erstellen. Zu den Kernvorteilen gehören: 1. Responsive Datenbindung, automatische Aktualisierungsansicht von Datenänderungen; 2. Komponentenentwicklung kann die Benutzeroberfläche in unabhängige und wiederverwendbare Komponenten aufgeteilt werden.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

EditPlus chinesische Crack-Version
Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Dreamweaver Mac
Visuelle Webentwicklungstools

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.
