Ich schreibe dies, um zu wissen, ob ich es richtig verstehe oder nicht.Design-Abfrage auf die ordnungsgemäße Verwendung der "Nebenwirkung" Begriff der NGRX/Effekte
Auf Online-Beispielen gefunden, das Muster geht in der Regel wie dieses (Beispiel hier auf Add/Löschaktionen über den Zustand und auf einer Remote-Datenbank):
effects.ts:
@Effect()
add$ = this.action$
.ofType(ADD)
.switchMap((action: Action) => {
return this.http.put(...)
.map(response => response.json())
.map(response => Observable.of({ type: ADD_SUCCESS, payload: action.payload }))
.catch(response => Observable.of({ type: ADD_FAIL, payload: response.status }))
Minderer. ts
...
switch (action.type){
case 'ADD_SUCCESS':
...
return new_state;
case 'ADD_FAIL':
return state;
}
Es funktioniert, aber die Geschwindigkeit der Ausführung, wie vom Benutzer gefühlt hängt davon ab, wie schnell das Netzwerk. So kam ich mit einem Muster auf, die Wetten auf der hohen Wahrscheinlichkeit, dass kein Fehler wird von der API zurückgegeben werden:
reducer.ts
...
switch (action.type){
case 'ADD':
... // make the adequate addition
return new_state;
case 'ADD_FAIL':
... // delete the addition previously made
return new_state;
}
effects.ts:
@Effect()
add$ = this.action$
.ofType(ADD)
.switchMap((action: Action) => {
return this.http.put(...)
.map(response => response.json())
.catch(response => Observable.of({ type: ADD_FAIL, payload: action.payload }))
In diesem Muster, die Aktion des Speicherns in der Datenbank ist wirklich ein "Nebeneffekt". Im unwahrscheinlichen Fall, in dem die API einen Fehler zurückgibt, wird eine zweite Aktion ausgeführt, um die erste Aktion rückgängig zu machen.
Aber ich habe diesen Entwurf noch nicht in den online gegebenen Beispielen gefunden: Da ich Amateur-Entwickler bin, frage ich mich, ob ich etwas verpasst habe, das es am Ende falsch/gefährlich/ineffizient macht.
Danke Tyler für Ihre schnelle und präzise Antwort. Ich stimme den Beispielen zu, dass das klassische Design besser ist. In dem vorgeschlagenen Design und für unkritische Daten, die auf dem Spiel stehen (wie in meinem Projekt), werde ich daran arbeiten, dem Benutzer die richtige Benutzeroberfläche zu geben, damit er versteht, dass seine Aktion nicht durchgeführt wurde. – guenam