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

Ursachen und Lösungen für den Nginx 502 Bad Gateway-Fehler

Der Nginx 502 Bad Gateway-Fehler ist mir schon me...

Lösen Sie das Problem, dass Docker Sudo-Operationen verwenden muss

Die Schritte sind wie folgt 1. Erstellen Sie eine...

Anwendung und Implementierung des Datencache-Mechanismus für kleine Programme

Informationen zum Miniprogramm-Datencache Datenca...

MySQL Series 11-Protokollierung

Tutorial-Reihe MySQL-Reihe: Grundlegende Konzepte...

Vorschau auf die neuen Funktionen von XHTML 2.0

<br />Bevor Browser die nächste Generation v...

Detaillierte Erläuterung der kombinierten MySQL-Indexmethode

Für jedes DBMS sind die Indizes der wichtigste Op...

5 äußerst nützliche Open-Source-Docker-Tools, die dringend empfohlen werden

Einführung Die Docker-Community hat viele Open-So...

Detaillierte Erklärung, wie Sie den Speicherverbrauch in MySql reduzieren können

Vorwort Standardmäßig initialisiert MySQL einen g...

So installieren Sie den Apache-Dienst im Linux-Betriebssystem

Downloadlink: Betriebsumgebung CentOS 7.6 in eine...