Soweit ich Redux verstanden habe, geht es darum, den gesamten Zustand der UI in einem Speicher zu halten (um bestimmte Zustände leicht reproduzieren zu können und keine Nebenwirkungen zu haben). Sie können den Zustand über Auslöseaktionen manipulieren, die Reduzierer auslösen.Wie UI-Statusänderungen zwischen React-Komponenten mit Redux kommunizieren?
Ich schreibe gerade eine kleine blogähnliche App, wo Sie einfach Posts erstellen und bearbeiten können. Ich habe einen Dialog für einen Beitrag erstellen, etwa die render
Methode der App
Komponente gibt so etwas wie dieses:
<div>
<AppBar ... />
<PostFormDialog
addPost={actions.addPost}
ref="postFormDialog" />
<PostList
posts={posts}
actions={actions} />
</div>
Meine Frage ist: sollte der Zustand des Dialogs (geöffnet oder geschlossen) Teil des Staates Objekt sein der App-Komponente? Und sollte daher das Öffnen und Schließen Sie den Dialog über eine Aktion ausgelöst werden, statt nach so etwas wie das tun:
onTriggerCreatePostDialog(e) {
this.refs.postFormDialog.show();
}
wo onTriggerCreatePostDialog
auf einer Schaltfläche „Erstellen“ über einige Klick-Listener ausgelöst wird oder so.
Es scheint mir ein bisschen seltsam, es über eine Aktion zu tun, weil es eine Art "Indirection" einführt.
jedoch davon aus, dass ich den Dialog für die Bearbeitungsaktion wiederverwendet werden soll, muß ich in der Lage sein, den Dialog von Elementen zu öffnen, die in der Komponentenstruktur tiefer sind, beispielsweise aus einem Post
Komponente, die ein Kind der PostList
ist Komponente. Was ich tun könnte, ist die onTriggerCreatePostDialog
Funktion unten in der Hierarchie gelangen über die props
Eigenschaft, aber das scheint mir lästig, ...
So int das Ende ist auch um die Kommunikation zwischen den Komponenten, die nicht in einem direkten Eltern-Kind sind Beziehung. Gibt es andere Möglichkeiten? Soll ich irgendwie einen globalen Event-Bus nutzen? Ich bin mir momentan ziemlich unsicher.
Angenommen, der Dialog ist nicht modal. Anfangs wird es nicht angezeigt und sein Zustand wird so verwaltet, wie Sie es vorschlagen. Ich klicke auf einen Button, 'showDialog' wird truthy und dieser Dialog wird angezeigt. Nun, wenn ich irgendwo anders als der Dialog klicken würde, wird es wieder geschlossen, aber 'showDialog' wird nicht entsprechend manipuliert, es sei denn, ich behandle diesen Fall explizit in' PostFormDialog'. Das ist nur ein Beispiel, wo die Handhabung des Zustands des Dialogs meiner Meinung nach umständlich ist. Würdest du es so machen? –
In Bezug auf die intelligente Komponente: Wäre es vielleicht sinnvoll, eine andere intelligente Komponente einzuführen, um beispielsweise den Status des modalen Dialogs zu verwalten? Angenommen, der Dialog kann verwendet werden, um einen neuen Beitrag zu erstellen und bestehende zu bearbeiten. Außerdem müssen Sie Dinge wie "Löschen" des Dialogs nach erfolgreicher Erstellung/Bearbeitung und so weiter behandeln ... –
dieser Ansatz wird funktionieren, aber es wird auch jede Dialogdarstellung/Verschwindensanimation brechen, oder? Da die Elternkomponente neu gerendert wurde, wird der Dialog sofort vom Bildschirm entfernt. Ich frage mich, was ist die beste Umgehungsmöglichkeit dafür? –