Der richtige Weg zur Komponentenentkopplung
P粉476475551
P粉476475551 2023-09-14 10:57:11
0
1
417

Ich beschäftige mich mit der Kommunikation zwischen zwei Komponenten (unter Verwendung von Vue 2), von denen eine eine Schaltfläche ist, die Zustände wie Anfang, Laden und Abschluss (Erfolg oder Misserfolg) haben kann. Für jeden Zustand der Schaltfläche kann ich einen anderen anzeigen Text, verschiedene Symbole (Laden: Drehsymbol, erfolgreicher Abschluss: Häkchen, Fehlerabschluss: x), ich habe auch ein Formular, das eine Schaltflächenkomponente verwendet. Ich bin mir nicht sicher, wie ich den Status der Schaltfläche basierend auf dem aktuellen Status der Formularübermittlung ändern kann. Bitte sehen Sie sich den Code unten an.

Meine Button-Komponente:

 

Meine Formularkomponente:

 

Im Code oben können Sie sehen, wie ich den Status der Schaltfläche basierend auf dem Status des Formulars ändere: Meine Schaltfläche gibt beim Klicken zwei Funktionen aus (startLoading, IncludedSuccessfully), und ich verwende diese beiden Funktionen dann in sendItemToCart.

Dies scheint die beiden Komponenten etwas zu sehr zu koppeln, da ich diese Funktionen als Parameter an die Methoden der übergeordneten Komponente übergeben muss. Außerdem habe ich eine andere Idee, wie das geht: Jeder Schaltfläche eine Referenz zu geben und dann ihre Methode mithilfe der Referenz in der übergeordneten Komponente aufzurufen. Die Idee klingt ein bisschen wie „Komposition statt Vererbung“ in der objektorientierten Programmierung, wo ich das Objekt/die Komponente einfach auffordere, etwas zu tun, in diesem Fall jedoch ohne die Funktion als Parameter zu nehmen.

Nun, die beiden oben genannten Fälle scheinen besser zu sein, als für jede Schaltfläche, die ich möglicherweise habe, eine Variable zu erstellen, aber sie scheinen verbesserungswürdig zu sein. Ich suche also: Wie kann ich meine Komponenten besser entkoppeln?

P粉476475551
P粉476475551

Antworte allen (1)
P粉023650014

如果我们讨论的是Vue 3(你没有指定Vue的版本,所以不确定是Vue 2),你可能正在寻找provide/inject

https://vuejs.org/guide/components/provide-inject.html

所以,如果你有一个父组件和一堆子组件,这些子组件只能作为父组件的后代出现(例如表单和输入框),你可以provide表单的状态:

OP评论说按钮也可能出现在其他地方,所以我们应该同时使用props和provide。在没有表单的情况下,我们可以使用props作为默认的注入值。

在表单组件中:

 

在按钮组件中: