サーバから新しいデータセットを受け取った後、リデューサから正しい状態を更新して返すのと混乱します。私は実際にサーバーの応答の後に何を返すか(状態を更新する方法)を理解していません。 は私の混乱についてより明確にできるようにするには:サーバコールの後の状態を更新しますか?
例えば:
// imports..
export function todoReducer(state = [], action) {
switch (action.type) {
// some cases...
case todoActions.TODO_LOADED: {
return [
...state,
{
...action.payload
}
]
}
// some more cases...
default:
return state;
}
}
と効果:藤堂アプリに私は減速を持っているでしょう
@Effect() todoList$: Observable<any> = this.action$
.ofType(todoActions.TODO_LOAD)
.switchMap(() => {
return this.http
.get('/rest/todo-list')
.map((todos: Todos) => new todoActions.TodoLoaded(todos))
.catch(err => Observable.of(new todoActions.TodoFailed(err)));
});
ときtodoActions.TODO_LOADがトリガーされたら、私は明らかにtodoリストを取得します。それまでは明らかです。
ただし、ユーザーがUIからToDoアイテムを削除した場合、私のレデューサーの状態を更新するにはどうすればよいですか?私はEXPについて
を削除して...するTODOのidを持つ私のコンポーネントからtodoActions.TodoRemoveアクションを派遣します:
@Effect() removeTodo$: Observable<any> = this.action$
.ofType(todoActions.TODO_REMOVE)
.switchMap((action : todoActions.TodoRemove) => {
return this.http
.delete(`/rest/todo-list/${action.payload['todoId']}`)
.map(() => {
// What kind of action should I apply here?
})
.catch(err => Observable.of(new todoActions.TodoFailed(err)));
});
そこで問題は、私がトリガーするアクションの種類ですサーバーからの応答が成功した後(私はわずか200になると思います)?
私がトリガーすればtodoActions.TODO_LOADもう一度。それは以前の状態とリストをマージし、私はtodosをダブルになるでしょう...
しかし、私たちは状態を変更するべきではありません...私は新しいtodosがロードされるたびに状態をリフレッシュすべきではありません.. 。 右?
または私はちょうどトンのような新しいアクションを作成しなければならないのは、をodoActions.TODO_REMOVE_SUCCESSEDと状態なしサーバから新しいToDoリストを返す...のような:
case todoActions.TODO_REMOVE_SUCCESSED: {
return [...action.payload ]
}
これはアンチパターンだろう?
多分これは愚かな質問ですが、私は...ここに事前に
おかげでアイデアを得ることはありません!
私はあなたが成功した(そして失敗した)削除のアクションを実行する正しい道にいると思います。 – Alex