Ich habe mit Flux gearbeitet und es macht mir wirklich Spaß, aber ich habe einen Punkt, an dem ich nicht einschätzen kann, was die beste Lösung wäre. Ich habe eine App erstellt, die eine Liste von Bestellungen bearbeitet, und jede Bestellung in der Liste ist in verschiedene Komponenten unterteilt, die den Lese- / Bearbeitungsmodus haben (im Grunde zu einem kleinen Formular wechseln) und ein Update auslösen (Liste der Produkte in der Bestellung, Versand) Kosten usw.).
Alles funktioniert gut, außer für den Fall, dass ich Ausnahmen vom Server bei der Auftragsaktualisierung behandeln muss (zB hat der Benutzer eine der Produktmengen geändert, aber es sind nicht genug auf Lager, ich möchte, dass die Komponente das Formular dafür anzeigt Produkt für diese spezifische Reihenfolge zeigen eine Inline-Nachricht, so muss ich die Fehlermeldung an eine sehr spezifische Komponente liefern.Die Liste kann bis zu 50 Bestellungen haben und jede Bestellung besteht aus 4-5 Komponenten, die das Update auslösen können, also Ich kann ungefähr 200 Komponenten haben, die potenziell an einer ORDER_UPDATE_FAILED Aktion interessiert sein könnten.
Die einzigen zwei Möglichkeiten, über die ich nachdenken kann, sind:
- Veranlassen Sie, dass die Komponente das API-Update synchron aufruft, damit sie den Fehler abrufen kann (der aktualisierte Auftrag wird als Nutzlast einer ORDER_UPDATED-Aktion gesendet und fließt durch den normalen Flux-Fluss: Dispatcher, Store, Trigger Update). Aber ich weiß, dass das ein bisschen die Flux-Philosophie bricht
-
Nehmen Sie die Aktualisierung asynchron vor und erstellen Sie eine ORDER_UPDATE_FAILED, und den Store mit der Logik zum Einfügen der Transformation in den Fehler in einem Objekt, das durch eine Auftragsteilkomponente identifiziert werden kann (über orderID + errorID nachdenken). Dies würde den unidirektionalen Zyklus der Daten und die Asynchronität der Aktionen beibehalten, aber es fühlt sich zu komplex und umständlich an und fügt einige weitere Probleme hinzu:
a) Wenn der Fehler im Store gespeichert wird, muss die Komponente den Speicher benachrichtigen, wenn der Fehler nicht mehr gültig ist, was möglicherweise nicht immer möglich ist.)
b) Wenn der Benutzer auf Speichern klickt, ohne einen Wert zu ändern, und die Komponente sich im "Ladezustand" befindet, bleibt der Befehl selbst bei erfolgreichem Aufruf derselbe, so dass er nicht aus dem "Ladezustand" herauskommt.
Hat jemand einen eleganteren Weg gefunden, um dieses Problem zu lösen?