Detaillierte Erläuterung der Selbstimplementierung von Dispatch und Broadcast (Dispatch und Broadcast) durch Vue

Detaillierte Erläuterung der Selbstimplementierung von Dispatch und Broadcast (Dispatch und Broadcast) durch Vue

Zu lösendes Problem

Hauptsächlich für die ebenenübergreifende Kommunikation zwischen Komponenten

Warum müssen Sie Dispatch und Broadcast selbst implementieren?

Denn bei der Entwicklung unabhängiger Komponenten oder Bibliotheken ist es am besten, sich nicht auf Bibliotheken von Drittanbietern zu verlassen

Warum nicht „Provide“ und „Inject“ verwenden?

Da das Verwendungsszenario hauptsächlich darin besteht, dass untergeordnete Komponenten den Status übergeordneter Komponenten erhalten, wird zwischen ebenenübergreifenden Komponenten eine aktive Bereitstellungs- und Abhängigkeitsinjektionsbeziehung hergestellt.
Dann gibt es zwei Szenarien, die es nicht gut lösen kann:
Die übergeordnete Komponente übergibt Daten an die untergeordnete Komponente (unterstützt ebenenübergreifend).
Die untergeordnete Komponente übergibt Daten an die übergeordnete Komponente (unterstützt ebenenübergreifend).

Der Code lautet wie folgt:

emitter.js

Funktion Broadcast (Komponentenname, Ereignisname, Parameter) {
 dies.$children.forEach(child => {
  const name = untergeordnetes Element.$Optionen.name;

  wenn (Name === Komponentenname) {
   Kind.$emit.apply(Kind, [Ereignisname].concat(Parameter));
  } anders {
   // todo Wenn params ein leeres Array ist, erhält es undefined
   broadcast.apply(Kind, [Komponentenname, Ereignisname].concat([Parameter]));
  }
 });
}
Standard exportieren {
 Methoden: {
  dispatch(Komponentenname, Ereignisname, Parameter) {
   lass übergeordnetes Element = dies.$übergeordnetes Element || dies.$wurzel;
   lass name = übergeordnetes Element.$options.name;

   während (übergeordnetes Element && (!name || name !== Komponentenname)) {
    Elternteil = Elternteil.$Elternteil;

    wenn (Elternteil) {
     Name = übergeordnetes Element.$Optionen.Name;
    }
   }
   wenn (Elternteil) {
    übergeordnetes Element.$emit.apply(übergeordnetes Element, [Ereignisname].concat(Parameter));
   }
  },
  Broadcast(Komponentenname, Ereignisname, Parameter) {
   broadcast.call(dies, Komponentenname, Ereignisname, Parameter);
  }
 }
};

übergeordnetes Element

<Vorlage>
 <div>
  <h1>Ich bin die übergeordnete Komponente</h1>
  <button @click="handleClick">Ereignis auslösen</button> <child />
 </div>
</Vorlage>
<Skript>
importiere Emitter aus "@/mixins/emitter.js";
importiere Kind aus "./child";
Standard exportieren {
 Name: "KomponenteA",
 Mixins: [Emitter],
 erstellt() {
  dies.$on("Kind-zu-p", dies.handleChild);
 },
 Methoden: {
  handleKlick() {
   this.broadcast("KomponenteB", "On-Message", "Hallo Vue.js");
  },
  handleChild(Wert) {
   Alarm(Wert);
  }
 },
 Komponenten:
  Kind
 }
};
</Skript>

Kind.vue

<Vorlage>
 <div>Ich bin eine untergeordnete Komponente</div>
</Vorlage>
<Skript>
importiere Emitter aus "@/mixins/emitter.js";
Standard exportieren {
 Name: "KomponenteB",
 Mixins: [Emitter],
 erstellt() {
  dies.$on("on-message", dies.showMessage);
  this.dispatch("KomponenteA", "Kind-zu-P", "Hallo Elternteil");
 },
 Methoden: {
  Nachricht anzeigen(Text) {
   Fenster.Alarm(Text);
  }
 }
};
</Skript>

Auf diese Weise kann eine benutzerdefinierte Kommunikation zwischen Komponenten auf verschiedenen Ebenen erreicht werden. Dabei ist jedoch ein Problem zu beachten: Das Abonnement muss vor der Veröffentlichung erfolgen, d. h. „on“ muss vor „emit“ kommen.

Renderreihenfolge für übergeordnete und untergeordnete Komponenten, Reihenfolge der Instanzerstellung

Die untergeordnete Komponente wird vor der übergeordneten Komponente gerendert. Wenn also das Mount-Ereignis der untergeordneten Komponente ausgelöst wird, ist es beim Mounten in der übergeordneten Komponente nicht zu hören.
Die Erstellung der übergeordneten Komponente geht der untergeordneten Komponente voraus, sodass die Erstellung in der übergeordneten Komponente überwacht werden kann

Dies ist das Ende dieses Artikels über Vues selbst implementiertes Dispatch und Broadcast (Dispatch und Broadcast). Weitere relevante Inhalte zu Vue Dispatch und Broadcast finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Praxis zur Optimierung des ersten Bildschirms einer Vue SPA-Einzelseitenanwendung
  • Vue-Implementierungsbeispiel für Broadcast und Dispatch
  • Vorab-Rendering einzelner Seiten über Vue-CLI, SEO-Prerender-Spa-Plugin-Vorgang
  • Verwendung von store.commit und store.dispatch in vuex
  • Vue SPA gibt zuerst den Implementierungscode für die Ladeanimation ein
  • Vue realisiert den Effekt des Zusammenführens von Spalten im Zeilenbereich einer Datentabelle
  • Routing-Caching-Probleme und -Lösungen in Vue SPA-Anwendungen
  • Lösen Sie das Problem, dass Vuex's Dispatch unter Vue+Electron keine Wirkung hat
  • VUE löst das Problem der WeChat-Signatur und der ungültigen SPA-WeChat-Signatur (perfekte Verarbeitung)
  • Detaillierte Erklärung, wann die Aktion in Vuex abgeschlossen ist und wie Dispatch korrekt aufgerufen wird
  • Vue SPA-Lösung zur Optimierung des ersten Bildschirms

<<:  So ändern Sie das Root-Passwort in MySQL 5.7

>>:  So implementieren Sie eine automatische Remote-Sicherung von MongoDB unter Linux

Artikel empfehlen

Detaillierte Schritte zur Yum-Konfiguration des Nginx-Reverse-Proxys

Teil.0 Hintergrund Die Intranetserver des Unterne...

So verwenden Sie die Vue3-Komponente zum asynchronen Laden von Daten Suspense

Inhaltsverzeichnis Vorwort Komponenten erstellen ...

Vue implementiert unregelmäßige Screenshots

Inhaltsverzeichnis Bilderfassung durch SVG CSS-Te...

Diskussion zum Problem der Initialisierung von Iframe-Knoten

Heute fiel mir plötzlich ein, die Produktionsprinz...

Beispieloperation MySQL Kurzlink

So richten Sie einen MySQL-Kurzlink ein 1. Überpr...

Zusammenfassung der Verwendung von Linux-SFTP-Befehlen

sftp ist die Abkürzung für Secure File Transfer P...

Hinweise zur Verwendung der verknüpften Liste des Linux-Kernel-Gerätetreibers

/******************** * Anwendung von verknüpften...

Richtige Schritte zur Installation von Nginx unter Linux

Vorwort Wenn Sie wie ich ein fleißiger Java-Backe...

Zusammenfassung einiger praktischer kleiner Zaubertricks in der Vue-Praxis

Wie können Sie das Lamaging von Routen vergessen,...

Kontext und Eigenschaften von React erklärt

Inhaltsverzeichnis 1. Kontext 1. Anwendungsszenar...