서버에서 새로운 데이터 세트를받은 후 감속기에서 올바른 상태로 돌아가고 업데이트하는 것과 혼동합니다. 사실 서버 응답 후 반환 할 내용 (상태를 업데이트하는 방법)을 이해하지 못합니다. 예를 들어서버 호출 후 상태를 업데이트 하시겠습니까?
:
// 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에서 할 일 항목을 제거하면 어떻게하면 감속기에서 상태를 업데이트 할 수 있습니까?
@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)));
});
그래서 질문은 내가 트리거해야 행동의 어떤 종류 : 나는 특급 들어
... 제거하기 위해 할 일의 ID로 내 구성 요소에서 todoActions.TodoRemove 조치를 파견 것 서버로부터의 성공적인 응답 후에 (단지 200이된다고 가정 해 봅시다)?
todoActions.TODO_LOAD을 다시 트리거합니다. 그것은 이전 상태와 목록을 병합 할 것이고 나는 todos double을 얻을 것이다. ...
그러나 우리는 상태를 변경하면 안된다. 그래서 새로운 todos가로드 될 때마다 상태를 새로 고쳐서는 안된다. . 권리?
또는 그냥 가을 odoActions.TODO_REMOVE_SUCCESSED t 같은 새로운 액션을 만들고 상태 않고 서버에서 새로운 할 일 목록을 반환해야합니까 ... 같은 :
는case todoActions.TODO_REMOVE_SUCCESSED: {
return [...action.payload ]
}
이 안티 패턴 있을까 ?
아마이 바보 같은 질문이지만, 내가 여기에 아이디어 ... 사전에
감사를하지 않습니다!
나는 성공적으로 (그리고 실패한) 제거 작업을 수행하기 위해 올바른 길을 가고 있다고 말할 것입니다. – Alex