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

Django2.* + Mysql5.7-Entwicklungsumgebung Integrations-Tutorial-Diagramm

Umfeld: MAC_OS 10.12 Python 3.6 MySQL 5.7.25 Djan...

Lernhinweise zum WeChat-Applet: Seitenkonfiguration und -routing

Ich habe kürzlich die Entwicklung kleiner Program...

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

1. HTML-Übersicht htyper Textauszeichnungssprache...

Detaillierte Analyse des temporären JDBC- und MySQL-Tablespace

Hintergrund Temporäre Tablespaces werden verwende...

HTML-Code für Multiheader-Tabellen

1. Code der Multiheader-Tabelle Code kopieren Der ...

Natives JS zum Erzielen digitaler Tisch-Spezialeffekte

Dieser Artikel beschreibt einen Digitaluhreffekt,...

Beispiel für das Hinzufügen von Attributen mithilfe von Stilen in HTML

Fügen Sie den erforderlichen Links Inline-Stile hi...

18 erstaunliche Verbindungen zwischen Interaktionsdesign und Psychologie

Designer müssen Psychologie verstehen, indem sie ...

So fügen Sie einem Feld in MySQL eine Standardzeit hinzu

Unterschiede und Verwendungen von Datumstypen MyS...

Es ist Jahresende, ist Ihr MySQL-Passwort sicher?

Vorwort: Das Jahr neigt sich dem Ende zu. Ist es ...

So verweisen Sie direkt auf Vue und Element-UI in HTML

Der Code sieht folgendermaßen aus: <!DOCTYPE h...