2016-07-28 28 views
0

Ich habe einen Aktionsersteller aus einer Komponente aufgerufen, um eine Ressource zu erstellen/bearbeiten, die wiederum eine API-Anfrage an einen Server sendet. Wie gehe ich mit Fällen um, in denen der Server nicht verfügbar ist, oder gibt es einen Fehler zurück? Ich möchte, dass relevante Komponenten über den Erfolg/Misserfolg informiert werden.Wie wird mit Server-/Request-Fehlern im Fluss umgegangen?

Meine aktuellen Ideen sind:

  1. Versand COMMENT_FAILED, COMMENT_SUCCESS Aktionen auf den Kommentar zu speichern, die dann irgendwie die Komponenten benachrichtigt?

  2. Verwenden Sie Versprechungen innerhalb der initiierenden Komponente, um Fehler vom Aktionsaufruf zu erkennen und entsprechend zu antworten/zu rendern.

Was ist besser? Warum?

Dies wurde zuvor in React+Flux: Notify View/Component that action has failed? gefragt, aber die einzige vorgeschlagene Lösung ist Promises wie in 2 zu verwenden. Ich kann das sicherlich tun, aber es scheint ... un-Flux-like.

+0

Welche Flussimplementierung verwenden Sie? – azium

+0

Ich benutze Facebook flux –

Antwort

1

Was ich normalerweise mache, ist ein Fehlerreduzierer speziell für meinen Container/Komponente zu erstellen. Wenn der Benutzer beispielsweise eine Anmeldung einreichte, würde ich den Fehler wie folgt an meinen Login Reducer senden.

export default function dispatchError() { 
     return function(dispatch) { 
      dispatch({ 
       type: 'LOGIN_ERROR', 
       payload: 'You entered an incorrect password' 
      }); 
     } 
} 

Jetzt in Ihrem Fall wäre dies sehr ähnlich. Immer wenn eine fehlgeschlagene Anfrage an Ihren Reducer geschickt wird.

+0

Ja, das ist sehr ähnlich zu dem, was ich dachte. Wie würden Sie Fälle behandeln, in denen Sie mehrere derselben Komponente auf derselben Seite haben? Sie möchten nur, dass die Komponente, die die Aktion initiiert hat, auf den Erfolgs-/Fehler-Versand reagiert. Vielleicht sind Versprechen in diesem Fall eine bessere Idee? –

+0

Ich glaube nicht, dass der Fluss von Facebook Reduzierer hat, sondern mehrere Geschäfte. Sollte jedoch ähnlich genug sein – azium