Lassen Sie uns zunächst darüber sprechen, warum wir Provide/Inject verwenden. Für die Kommunikation zwischen Großvater- und Enkelkomponenten oder sogar zwischen Urgroßvater- und Enkelkomponenten können wir einfach vuex verwenden. Das ist tatsächlich der Fall, aber bitte hören Sie mir zu, manchmal ist Ihr Projekt relativ klein und es gibt sogar nur wenige Szenarien für die Komponentenkommunikation. Ist es in diesem Fall nicht Verschwendung, Vuex nur für einige Kommunikationsparameter einzuführen? Manche Leute denken vielleicht auch daran, Ohne weitere Umschweife möchte ich Ihnen nur sagen, dass die Verwendung von Provide/Inject die Lösung für Ihre Probleme ist. Mal sehen, wie man es verwendet. Backhand besteht nur aus ein paar Zeilen einfachem Code: 1. Die übergeordnete Komponente stellt die Parameter bereit, die an die untergeordnete Komponente übergeben werden sollen provide() { zurückkehren { Listentyp: dieser.Listentyp, } } 2. Verwendung von Unterkomponenten: einfügen: ['Listentyp'], Natürlich kannst du auch in inject deine Standardwerte und die Quelle deiner Parameter angeben: injizieren:{ Listentyp: { von: „par“ // geben Sie den definierten Namen an Standard: 1 } } Okay! Ist es nicht einfach? Tatsächlich können sowohl übergeordnete als auch Vorgängerkomponenten Abhängigkeiten in untergeordnete Komponenten einfügen, unabhängig davon, wie tief die Komponentenhierarchie ist. Noch mehr: provide kann ein Objekt oder eine Funktion sein, die ein Objekt zurückgibt. inejct: kann ein Zeichenfolgenarray oder ein Objekt sein. Wenn Sie interessiert sind, schauen Sie sich den Quellcode unten an, der auch recht einfach zu verstehen ist: Geben Sie den Kernquellcode an: Exportfunktion bereitstellen<T>(Schlüssel: InjectionKey<T> | Zeichenfolge | Zahl, Wert: T) { wenn (!aktuelleInstanz) { wenn (__DEV__) { warnen(`provide() kann nur innerhalb von setup() verwendet werden.`) } } anders { //Holen Sie sich die Provides der aktuellen Komponente. Die Standardinstanz erbt das Provides-Objekt der übergeordneten Klasse. let provides = currentInstance.provides //Verwenden Sie das übergeordnete bereitgestellte Objekt als Prototyp, um Ihr eigenes bereitgestelltes Objekt zu erstellen const parentProvides = currentInstance.parent und currentInstance.parent.provides wenn (parentProvides === bietet) { bietet = aktuelleInstanz.bietet = Objekt.erstellen(übergeordnetesAngebot) } liefert [Schlüssel als Zeichenfolge] = Wert } } Kernquellcode von Inject: Exportfunktion injizieren ( Schlüssel: InjectionKey<beliebig> | Zeichenfolge, Standardwert?: unbekannt, TreatDefaultAsFactory = falsch ) { //Aktuelle Komponenteninstanz abrufen const instance = currentInstance || currentRenderingInstance wenn (Instanz) { //Get bietet const bietet = Instanz.übergeordnet == null ? Instanz.vnode.appContext und Instanz.vnode.appContext.provides : Instanz.übergeordnetes Element.bietet if (bietet && (Schlüssel als Zeichenfolge | Symbol) in bietet) { //Wenn der Schlüssel existiert, liefert die Rückgabe direkt [Schlüssel als String] } sonst wenn (Argumente.Länge > 1) { //Wenn der Schlüssel nicht existiert, legen Sie den Standardwert fest und geben Sie den Standardwert direkt zurück return TreatDefaultAsFactory && isFunction(defaultValue) ? Standardwert.Aufruf(Instanz.Proxy) : Standardwert } sonst wenn (__DEV__) { //Wenn keines davon gefunden wird, warne(`injection "${String(key)}" nicht gefunden.`) } } sonst wenn (__DEV__) { warnen(`inject() kann nur innerhalb von setup() oder funktionalen Komponenten verwendet werden.`) } } Damit ist dieser Artikel über die Analyse der Verwendung und Prinzipien von Vues Provide und Inject abgeschlossen. Weitere Informationen zur Verwendung von Vue Provide und Inject finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Beispielcode für HTML-Framesets
>>: Beispielcode zur Implementierung einer Kreisbahnanimation mit CSS3 und Tabellen-Tags
Die neueste Verpackungsschachtel für Perfect Aloe...
In meiner früheren Arbeit war der Entwicklungsser...
6 Lösungen für Netzwerkfehler im Docker-Container...
1. HTML-Übersicht htyper Textauszeichnungssprache...
Inhaltsverzeichnis 1. v-bind: kann einige Daten a...
Das Projekt wurde in diesen Tagen getestet und de...
Ich erstelle schon lange Websites, habe aber immer...
Szenario: Ein Prüfdokument hat n Prüfdetails und ...
1. Anforderungsbeschreibung Bei einem bestimmten ...
Umweltbeschreibung: Es gibt eine laufende MySQL-U...
1. Anzeige:Box; Wenn Sie diese Eigenschaft für ei...
Methode 1: GLOBAL festlegen general_log = "A...
Vorwort Um zum Originalcode kompatibel zu sein, b...
Vorwort: js ist eine Single-Thread-Sprache, daher...
1. Gründe Wenn das System Centos7.3 ist, ist die ...