Analysieren Sie die Verwendung und Prinzipien von Vues Bereitstellung und Injektion

Analysieren Sie die Verwendung und Prinzipien von Vues Bereitstellung und Injektion

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, $parent zu verwenden, um die übergeordnete Komponenteninstanz abzurufen und Daten/Methoden abzurufen. Das ist für zwei Ebenen in Ordnung, aber was ist mit mehreren Ebenen? Wenn die Komponenten tief verschachtelt sind, wie macht man das dann? Schreiben Sie eine Funktion, um $parent erneut zu kapseln. Wäre das nicht sehr ärgerlich? Sie müssen keinen Umweg nehmen, um das Problem zu lösen, wenn es bereits da ist. Haha, das geht vom Thema ab.

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:
  • Vue löst das Problem der Bereitstellung und Einfügung von Antworten
  • Beispiel für die Implementierung einer reaktionsschnellen Datenaktualisierung mit Provide/Inject in Vue.js
  • So verwenden Sie [provide/inject] in Vue, um ein Neuladen der Seite zu implementieren
  • Praktische Anwendung der Provide/Inject-Kombination in Vue 2.0
  • Lernen und Verwenden von Provide/Inject in Vue

<<:  Beispielcode für HTML-Framesets

>>:  Beispielcode zur Implementierung einer Kreisbahnanimation mit CSS3 und Tabellen-Tags

Artikel empfehlen

Drei Möglichkeiten zum Konfigurieren einer JNDI-Datenquelle in Tomcat

In meiner früheren Arbeit war der Entwicklungsser...

6 Lösungen für Netzwerkfehler im Docker-Container

6 Lösungen für Netzwerkfehler im Docker-Container...

Zusammenfassung der HTML-Wissenspunkte für das Frontend (empfohlen)

1. HTML-Übersicht htyper Textauszeichnungssprache...

Die Verwendung der Vue-Direktive v-bind und zu beachtende Punkte

Inhaltsverzeichnis 1. v-bind: kann einige Daten a...

Wartungsmethode für den Innodb-Systemtabellenbereich

Umweltbeschreibung: Es gibt eine laufende MySQL-U...

Detaillierte Erklärung der neuen CSS-Eigenschaft display:box

1. Anzeige:Box; Wenn Sie diese Eigenschaft für ei...

Zusammenfassung der Methoden zum Bereinigen von Mysql general_log

Methode 1: GLOBAL festlegen general_log = "A...

Detaillierte Erläuterung des Zeitdarstellungsbeispiels des Linux-Zeitsubsystems

Vorwort Um zum Originalcode kompatibel zu sein, b...

Erläuterung von JavaScript-Mikrotasks und Makrotasks

Vorwort: js ist eine Single-Thread-Sprache, daher...