Detaillierte Erläuterung der Wertübertragung von nicht über- und untergeordneten Komponenten in Vue3

Detaillierte Erläuterung der Wertübertragung von nicht über- und untergeordneten Komponenten in Vue3
Die Werteübertragung von nicht über- und untergeordneten Komponenten in vue2 erfolgt hauptsächlich über den Ereignisbus. Dabei wird eine Vue-Instanz erstellt und das Kommunikationsverhalten zwischen nicht über- und untergeordneten Komponenten durch Importieren der Instanz in verschiedene Komponenten implementiert.
Vue3 bietet die Eigenschaften **provide** und **inject**, die eine Kommunikation zwischen nicht über- und untergeordneten Komponenten ermöglichen.
Angenommen, es gibt drei Komponenten: App.vue (übergeordnet), sub1 (untergeordnet), sub2 (untergeordnet von untergeordnet):

App.vue

<Vorlage>
  <div Stil="border: 1px durchgehend rosa">
    <h1>Ich bin dein Vater</h1>
    👇
    <sub1/>
  </div>
</Vorlage>
<Skript>
  importiere sub1 aus './sub1'
	Standard exportieren {
		Name: "App",
    Komponenten: {
			unter1,
    },
    provide:{ // Definieren Sie provide in der übergeordneten Komponente, um den zu übergebenden Wert zu deklarieren names:['peanut','javascriptKing']
    }
	}
</Skript>
<Stilbereich>
</Stil>

sub1.vue

<Vorlage>
  <h2>Ich bin eine untergeordnete Komponente der ersten Ebene</h2>
  👇
  <sub2/>
</Vorlage>
<Skript>
  importiere sub2 aus "./sub2";
	Standard exportieren {
		Name: "sub1",
    Komponenten: {
			unter2,
    }
	}
</Skript>
<Stilbereich>
</Stil>

sub2.vue

<Vorlage>
  <h3>Ich bin der Jüngste, der Enkel</h3>
  <div>Ich habe auf das Namensarray der Komponente der obersten Ebene verwiesen ===> {{names}}</div>
</Vorlage>
<Skript>
	Standard exportieren {
		Name: "sub2",
    // Akzeptieren Sie einen ebenenübergreifenden Wert in der untergeordneten Komponente durch inject:['names'],
	}
</Skript>
<Stilbereich>
</Stil>

Der Implementierungseffekt ist wie folgt. Sie können sehen, dass der an die Komponente der obersten Ebene übergebene Wert normal abgerufen werden kann:

Bildbeschreibung hier einfügen

Es gibt aber auch Probleme:

Das heißt: Wie können wir dafür sorgen, dass die Komponente der obersten Ebene reagiert, wenn sich der Wert ändert, den sie übergeben möchte?

Wie erhält man dadurch die aktuelle Instanz in der Provide-Eigenschaft?

Hier müssen Sie das Provide-Attribut als Methode schreiben und ein Array oder Objekt zurückgeben:

<Vorlage>
  <div Stil="border: 1px durchgehend rosa">
    <h1>Ich bin dein Vater</h1>
    👇
    <sub1/>
  </div>
</Vorlage>
<Skript>
  importiere sub1 aus './sub1'
	Standard exportieren {
		Name: "App",
    Daten(){
			zurückkehren {
				Namen: ['Erdnuss', 'JavascriptKing']
      }
    },
    Komponenten: {
			unter1,
    },
    /*Wenn Sie es so schreiben, erhalten Sie dies nicht. Dies bedeutet derzeit nur, dass der Umfang im Skript nicht definiert ist*/
    /*bieten:{
			diese.namen,
    }*/
  // Sollte so geschrieben werden provide(){
    	zurückkehren {
    		Namen:diese.namen
      }
    }
	}
</Skript>
<Stilbereich>
</Stil>

Obwohl wir, wie oben geschrieben, die Daten unter der Instanz abrufen können, auf die hier verwiesen wird, stellt sich die Frage, wie wir eine Abhängigkeit zwischen ihnen herstellen und Reaktionsfähigkeit erreichen können. Dazu müssen wir folgende Änderungen an App.vue vornehmen:

<Vorlage>
  <div Stil="border: 1px durchgehend rosa">
    <h1>Ich bin dein Vater</h1>
    👇
    <sub1/>
  </div>
</Vorlage>
<Skript>
  importiere sub1 aus './sub1'
  importiere {berechnet} von 'vue'
	Standard exportieren {
		Name: "App",
    Daten(){
			zurückkehren {
				Namen: ['Erdnuss', 'JavascriptKing']
      }
    },
    Komponenten: {
			unter1,
    },
    /*Wenn Sie es so schreiben, erhalten Sie dies nicht. Dies bedeutet derzeit nur, dass der Umfang im Skript nicht definiert ist*/
    /*bieten:{
			diese.namen,
    }*/
  // Sollte so geschrieben werden provide(){
    	zurückkehren {
    		names:computed(() =>{ this.names.length }) // Verwende die berechnete Eigenschaft, um die Variable zurückzugeben, sodass zwischen den Namen und den Namen in den Daten eine Abhängigkeitsbeziehung besteht}
    },
    montiert() {
    	setzeIntervall(()=>{
    		dies.names.push('Vue King!')
      },1000)
    }
	}
</Skript>
<Stilbereich>
</Stil>

Zusammenfassen

Dieser Artikel endet hier. Ich hoffe, er kann Ihnen helfen. Ich hoffe auch, dass Sie mehr Inhalt auf 123WORDPRESS.COM lesen können!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung verschiedener Möglichkeiten zur Kommunikation und Wertübergabe zwischen Komponenten in Vue
  • Woher wissen Sie, wie Werte zwischen Vue-Komponenten übergeben werden?
  • Detaillierte Erklärung der Wertübertragung zwischen übergeordneten und untergeordneten Komponenten in Vue3
  • Detaillierte Erläuterung der Werteübertragung von Vue-Eltern-Kind-Komponenten und der Probleme beim unidirektionalen Datenfluss
  • Eine kurze Diskussion über den Werttransfer zwischen Vue-Komponenten (einschließlich Vuex)
  • Super einfache und leicht verständliche Übertragung von Vue-Komponentenwerten

<<:  Lösen Sie schnell das Problem des langsamen und hängenden Öffnens von input[type=file]

>>:  Eine kurze Analyse der zugrunde liegenden Prinzipien von MySQL-Transaktionen und Isolationsebenen

Artikel empfehlen

Detaillierte Analyse von MySQL-Deadlock-Problemen

Vorwort Wenn sich unser Geschäft in einem sehr fr...

36 Prinzipien der MySQL-Datenbankentwicklung (Zusammenfassung)

Vorwort Diese Prinzipien sind aus tatsächlichen K...

jQuery-Plugin zur Implementierung des sekundären Akkordeonmenüs

Dieser Artikel verwendet ein jQuery-Plugin, um ei...

Funktionsweise von SQL-SELECT-Datenbankabfragen

Obwohl wir keine professionellen DBAs sind, könne...

Analyse der MySql CURRENT_TIMESTAMP-Funktion anhand eines Beispiels

Beim Erstellen eines Zeitfelds STANDARD CURRENT_T...

HTML/CSS (der erste Leitfaden, den Anfänger unbedingt lesen sollten)

1. Die Bedeutung von Webstandards verstehen - War...

MySQL-Backup-Tabellenvorgang basierend auf Java

Der Kern ist mysqldump und Runtime Der Vorgang is...

Detaillierte Erklärung der neuen Funktionen von ES9: Asynchrone Iteration

Inhaltsverzeichnis Asynchrones Durchlaufen Asynch...

Mobile Web-Bildschirmanpassung (rem)

Vorwort Ich habe vor Kurzem meine bisherigen Noti...

Drei Möglichkeiten zum Implementieren eines Textfarbverlaufs in CSS

Bei der Entwicklung von Web-Frontends entwerfen U...

Detaillierte Erklärung des Nginx-Prozessplanungsproblems

Nginx verwendet eine feste Anzahl von Multiprozes...