Technologieaustausch

Vollständige Erklärung der Vue 3-Komponentenkommunikation: von grundlegenden bis hin zu fortgeschrittenen Techniken

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Einführung

Vue 3 führt die Composition API ein, die der Komponentenkommunikation neue Flexibilität und Leistungsfähigkeit verleiht.

Grundlagen der Komponentenkommunikation

Definition und Funktion von Komponenten

Bei der Frontend-Entwicklung kann man sich Komponenten als unabhängige Einheiten vorstellen, die eine Benutzeroberfläche bilden. Es umfasst spezifische Funktionen und Stile, kann wiederverwendet werden und kann unabhängig von anderen Teilen entwickelt und getestet werden. Die Hauptfunktion von Komponenten besteht darin, die Wiederverwendbarkeit, Wartbarkeit und Skalierbarkeit von Code zu verbessern. Durch die Aufteilung der Schnittstelle in mehrere Komponenten können Entwickler komplexe Anwendungen einfacher verwalten und jede Komponente kann optimiert werden, um die Gesamtentwicklungseffizienz und Anwendungsleistung zu verbessern.

Komponentenbaum und Eltern-Kind-Komponentenbeziehung

In Front-End-Frameworks wie Vue.js können Komponenten verschachtelt werden, um einen Komponentenbaum zu bilden. In dieser Baumstruktur kann jede Komponente Unterkomponenten haben, und diese Unterkomponenten können ihre eigenen Unterkomponenten haben, wodurch eine hierarchische Struktur entsteht. Diese Struktur macht die Beziehung zwischen den Komponenten klar und erleichtert die Verwaltung und Wartung.

  • Beziehung zwischen Eltern-Kind-Komponenten : Im Komponentenbaum kann eine Komponente eine andere Komponente erstellen. In diesem Fall wird der Ersteller als übergeordnete Komponente und die erstellte Komponente als untergeordnete Komponente bezeichnet. Übergeordnete Komponenten können Daten und Methoden an untergeordnete Komponenten übergeben, und untergeordnete Komponenten können über Ereignisse Informationen an übergeordnete Komponenten senden. Diese Eltern-Kind-Beziehung ist die Grundlage für die Komponentenkommunikation.
  • Geschwisterkomponentenbeziehung : Mehrere untergeordnete Komponenten unter derselben übergeordneten Komponente sind Geschwisterkomponentenbeziehungen. Geschwisterkomponenten können nicht direkt miteinander kommunizieren und die Kommunikation zwischen ihnen muss normalerweise über die übergeordnete Komponente weitergeleitet werden.
  • Beziehungen zwischen Vorfahren- und Nachkommenkomponenten : Im Komponentenbaum ist die übergeordnete Komponente der übergeordneten Komponente die Vorgängerkomponente und die untergeordnete Komponente der untergeordneten Komponente ist die untergeordnete Komponente. Diese Beziehung ist besonders wichtig, wenn es um tief verschachtelte Komponenten geht.

Die Konzepte von Komponentenbäumen und Eltern-Kind-Komponentenbeziehungen sind für das Verständnis der Komponentenkommunikation von entscheidender Bedeutung. Die Beherrschung dieser Grundkenntnisse kann Entwicklern dabei helfen, Kommunikationsmechanismen zwischen Komponenten effektiver zu entwerfen und zu implementieren.

Eltern-Kind-Komponentenkommunikation (Vue 3)

Eltern übergibt Daten an Kind (Requisiten)

Was sind Requisiten?
Requisiten sind ein Mechanismus für übergeordnete Komponenten, um Daten an untergeordnete Komponenten zu übergeben.Verwenden Sie in Vue 3definePropsDie API wird zum Deklarieren empfangender Requisiten verwendet, wodurch der unidirektionale Datenfluss aufrechterhalten und die Unabhängigkeit und Wiederverwendbarkeit von Komponenten sichergestellt wird.

So übergeben Sie Requisiten in der übergeordneten Komponente
Verwenden Sie in der Vorlage der übergeordneten Komponentev-bindoder Abkürzung:So binden Sie Daten:

  1. <template>
  2. <ChildComponent :my-prop="parentData" />
  3. </template>

Hier,:my-propZeigt an, dass es sich um eine dynamisch gebundene Requisite handelt.parentDataSind die in der übergeordneten Komponente definierten Daten

So erhalten Sie Requisiten in der untergeordneten Komponente
Verwenden Sie in der untergeordneten KomponentedefinePropsSo deklarieren Sie die erhaltenen Requisiten:

  1. <script setup>
  2. import { defineProps } from 'vue';
  3. const props = defineProps({
  4. myProp: String
  5. });
  6. </script>

existieren<script setup>Im syntaktischen Zucker,definePropsStellt Requisiten automatisch als responsive Eigenschaften der Komponente bereit

Kind übergibt Ereignis an Eltern (Emit)

was ist emittieren
Emit ist ein Mechanismus für untergeordnete Komponenten, um Nachrichten an übergeordnete Komponenten zu senden.Verwenden Sie in Vue 3defineEmitsAPI zum Deklarieren von Ereignissen, die ausgegeben und verwendet werden könnenemitFunktion zum Auslösen von Ereignissen.

So lösen Sie ein Ereignis in einer untergeordneten Komponente aus
Verwenden Sie in der Methode der untergeordneten Komponente defineEmits um Ereignisse zu deklarieren, die ausgegeben und verwendet werden können emit auslösen:

  1. <script setup>
  2. import { defineEmits } from 'vue';
  3. const emit = defineEmits(['my-event']);
  4. function triggerEvent() {
  5. emit('my-event', dataToPass);
  6. }
  7. </script>

defineEmitswird verwendet, um Ereignisse zu deklarieren, die eine Komponente ausgeben kann, whileemitUm diese Ereignisse auszulösen, werden Funktionen verwendet.

So hören Sie auf Ereignisse der untergeordneten Komponente in der übergeordneten Komponente
In der Vorlage der übergeordneten Komponenteverwendenv-onoder Abkürzung@ So lauschen Sie auf Ereignisse, die von untergeordneten Komponenten ausgegeben werden:

  1. <template>
  2. <ChildComponent @my-event="handleEvent" />
  3. //或者<ChildComponent v-on:my-event="handleEvent" />
  4. </template>

Hier,@my-eventZeigt an, dass die hörende Unterkomponente etwas ausgibtmy-eventEreignis,handleEventEs handelt sich um eine in der übergeordneten Komponente definierte Methode. Wenn das Ereignis ausgelöst wird, wird diese Methode aufgerufen.

Umfangreiches Beispiel

Angenommen, es gibt eine übergeordnete KomponenteParentComponentund eine UnterkomponenteChildComponent, die übergeordnete Komponente muss Daten an die untergeordnete Komponente übergeben und die untergeordnete Komponente muss die übergeordnete Komponente nach einem bestimmten Vorgang benachrichtigen.

übergeordnete KomponenteParentComponent.vue

  1. <template>
  2. <ChildComponent :my-prop="parentData" @child-event="handleChildEvent" />
  3. </template>
  4. <script setup>
  5. import { ref } from 'vue';
  6. import ChildComponent from './ChildComponent.vue';
  7. const parentData = ref('initial data');
  8. const handleChildEvent = (data) => {
  9. console.log('Received data from child:', data);
  10. };
  11. </script>

UnterbaugruppeChildComponent.vue

  1. <template>
  2. <button @click="sendDataToParent">Send Data to Parent</button>
  3. </template>
  4. <script setup>
  5. import { defineProps, defineEmits } from 'vue';
  6. const props = defineProps({
  7. myProp: String
  8. });
  9. const emit = defineEmits(['child-event']);
  10. function sendDataToParent() {
  11. emit('child-event', props.myProp);
  12. }
  13. </script>

In diesem Beispiel wird die übergeordnete Komponente bestanden:my-propÜbergeben Sie Daten an untergeordnete Komponenten und übergeben Sie sie@child-event Hören Sie auf Ereignisse, die von untergeordneten Komponenten ausgegeben werden.untergeordnete Komponente durchläuftdefinePropsEmpfängt den von der übergeordneten Komponente übergebenen InhaltmyProp, und verwenden Sie es im Button-Click-EreignisemitDaten an die übergeordnete Komponente senden.

Verwendung von Pinia (Staatsverwaltungsbibliothek für Vue 3)

Die Vorteile und Funktionen von Pinia

Pinia ist die offiziell empfohlene Statusverwaltungsbibliothek für Vue 3. Sie bietet eine komponentenbasierte Möglichkeit, den Anwendungsstatus zu verwalten. Hier sind einige der wichtigsten Vorteile und Funktionen von Pinia:

  • Komponenten-API: Pinia übernimmt eine komponentenbasierte API, wodurch die Trennung von Statusverwaltung und Komponentenlogik natürlicher wird.
  • TypeScript-Unterstützung: Pinia hat von Anfang an die TypeScript-Unterstützung in Betracht gezogen, um eine bessere Typinferenz und Editorunterstützung bei der Entwicklung mit TypeScript zu ermöglichen.
  • Modular: Mit Pinia können Sie den Status in mehrere Stores aufteilen, und jeder Store kann seinen eigenen Status und seine eigene Logik unabhängig verwalten.
  • Composite-API-kompatibel: Pinia ist perfekt in die Composition API von Vue 3 integriert, wodurch die Trennung von Statusverwaltung und Komponentenlogik natürlicher wird.
  • Debuggen von Zeitreisen: Pinia bietet Zeitreise-Debugging-Funktionen, die es Entwicklern ermöglichen, Zustandsänderungen einfach zurückzuverfolgen und zu überprüfen.
So richten Sie Pinia ein und verwenden es

Um Pinia nutzen zu können, müssen Sie zunächst Pinia installieren:

npm install pinia

Oder verwenden Sie Garn:

yarn add pinia

Anschließend richten Sie Pinia in Ihrer Vue-Anwendung ein:

  1. import { createPinia } from 'pinia';
  2. const pinia = createPinia();
  3. app.use(pinia);

Erstellen Sie einen Shop:

  1. import { defineStore } from 'pinia';
  2. export const useCounterStore = defineStore('counter', () => {
  3. const count = ref(0);
  4. function increment() {
  5. count.value++;
  6. }
  7. return { count, increment };
  8. });

Store-in-Komponente verwenden:

  1. <script setup>
  2. import { useCounterStore } from '@/stores/counter';
  3. const counterStore = useCounterStore();
  4. </script>
  5. <template>
  6. <div>
  7. <p>Count: {{ counterStore.count }}</p>
  8. <button @click="counterStore.increment">Increment</button>
  9. </div>
  10. </template>
Pinia-Integration mit Komponenten

Die Integration von Pinia in Komponenten ist sehr einfach, hauptsächlich durchdefineStore Funktion zum Erstellen eines Shops. In Komponenten können Sie den Status und die Methoden direkt im Store verwenden:

  1. <template>
  2. <div>
  3. <p>Count: {{ count }}</p>
  4. <button @click="increment">Increment</button>
  5. </div>
  6. </template>
  7. <script setup>
  8. import { useCounterStore } from '@/stores/counter';
  9. const counterStore = useCounterStore();
  10. const { count, increment } = storeToRefs(counterStore);
  11. //如果这里不使用storeToRefs会丢失响应式特性
  12. </script>

Im obigen Beispiel greifen wir direkt in die Vorlage zucountum den Zählerwert anzuzeigen und ihn im Schaltflächenklickereignis aufzurufenincrementMethode zum Erhöhen des Zählerwerts.

Vue 3 einzigartige Kommunikationsmethode

Bereitstellen/Injizieren

Grundlegende Verwendung von Provide/Inject
In Vue 3,provideUndinjectDabei handelt es sich um eine Kommunikationsmethode zwischen übergeordneten und untergeordneten Komponenten, die es einer Vorgängerkomponente ermöglicht, eine Abhängigkeit in alle ihre Nachkommenkomponenten einzufügen, unabhängig davon, wie tief die Komponentenhierarchie ist.

  • Daten bereitstellen: Verwendung der VorgängerkomponenteprovideFunktionen stellen Daten bereit.
  • Daten einspeisen: Wird von untergeordneten Komponenten verwendetinjectFunktion fügt Daten ein.

Anwendbare Szenarien für Provide/Inject
provideUndinjectAnwendbar auf die folgenden Szenarien:

  • Wenn Sie vermeiden möchten, mehrere Schichten zu durchlaufenpropsbei der Datenübergabe.
  • Wenn Sie möchten, dass mehrere Komponenten im Komponentenbaum Daten gemeinsam nutzen.

Beispielcode

  1. // 祖先组件
  2. export default {
  3. setup() {
  4. const message = 'Hello from Ancestor!';
  5. provide('message', message);
  6. }
  7. }
  8. // 子孙组件
  9. export default {
  10. setup() {
  11. const message = inject('message');
  12. return { message };
  13. }
  14. }
Teleport

Das Konzept und die Verwendung von Teleport
TeleportEs handelt sich um eine neue integrierte Komponente, die in Vue 3 hinzugefügt wurde und es Ihnen ermöglicht, einen Teil der Vorlage innerhalb einer Komponente an jeden anderen Ort im DOM zu „übertragen“.

So verwenden Sie Teleport für die Komponentenkommunikation
Teleport Es dient nicht der Kommunikation zwischen Komponenten, sondern der Steuerung der Renderposition von Komponenten.aber du kannst es verwendenTeleportEine besondere Kommunikationsmethode wird durch das Rendern von Teilen einer Komponente im DOM der übergeordneten Komponente erreicht.

Beispielcode

  1. <!-- 父组件 -->
  2. <template>
  3. <div>
  4. <Teleport to="body">
  5. <ChildComponent />
  6. </Teleport>
  7. </div>
  8. </template>
  9. <!-- 子组件 -->
  10. <template>
  11. <div>Some content</div>
  12. </template>
Kompositions-API

Einführung in die Kompositions-API
Vue 3 führt die Composition API ein, die eine neue Möglichkeit zum Organisieren und Wiederverwenden von Logik bietet.passierensetupMithilfe von Funktionen können Entwickler den Reaktionszustand und den Lebenszyklus von Komponenten flexibler steuern.

Verwenden Sie ref und reactive für die Kommunikation zwischen Komponenten
refUndreactiveEs handelt sich um ein Tool in der Composition API zum Erstellen responsiver Daten.

  • refReaktive Referenzen zum Erstellen grundlegender Datentypen.
  • reactiveReaktive Referenz zum Erstellen von Objekttypen.

Verwenden von Provide und Inject in der Composition API
In der Kompositions-APIprovideUndinjectzulässigsetupWird in Funktionen verwendet, um eine komponentenübergreifende Kommunikation zu erreichen.

Beispielcode

  1. // 祖先组件
  2. import { provide } from 'vue';
  3. export default {
  4. setup() {
  5. const message = ref('Hello from Ancestor!');
  6. provide('message', message);
  7. }
  8. }
  9. // 子孙组件
  10. import { inject } from 'vue';
  11. export default {
  12. setup() {
  13. const message = inject('message');
  14. return { message };
  15. }
  16. }

Durch diese einzigartigen Kommunikationsmethoden von Vue 3 können Entwickler die Kommunikation zwischen Komponenten flexibler organisieren und die Wartbarkeit und Wiederverwendbarkeit von Code verbessern.

Zusammenfassen

Vue 3 führt die Composition API ein, die der Komponentenkommunikation neue Flexibilität und leistungsstarke Funktionen verleiht. Die Komponentenkommunikation ist der Schlüssel zum Aufbau komplexer Benutzeroberflächen in der Front-End-Entwicklung. Sie umfasst die Datenübertragung und Ereignisauslösung zwischen übergeordneten und untergeordneten Komponenten, Geschwisterkomponenten sowie Vorfahren- und Nachkommenkomponenten. Vue 3 bietet eine Vielzahl von Kommunikationsmethoden, darunter traditionelle Props und Emit, sowie die neue Provide/Inject-, Teleport- und Composition-API.

Empfohlene verwandte Informationen

Die Erstellung ist nicht einfach. Wenn Ihnen dieser Artikel hilft, können Sie mir ein „Gefällt mir“ geben?