2016-11-22 10 views
1

저는 단순 (또는 고급) 감속기를 제공하는 일부 공장 기능을 작성했습니다. 내 캐주얼 행동의 대부분을 처리하는 완전한 기능 감속기로를 구성 할 수있는 그 공장 기능과 redux에서 combineReducers를 사용Redux에서 고차원 감속기를 작성하십시오.

export const reduceRequestState = (requestTypes: RequestActionTypes) => 
    (state: RequestState = RequestState.None, action: Action): RequestState => { 
     switch (action.type) { 
      case requestTypes.start: 
       return RequestState.Waiting; 
      case requestTypes.success: 
       return RequestState.Success; 
      case requestTypes.error: 
       return RequestState.Error; 
      case requestTypes.reset: 
       return RequestState.None; 
      default: 
       return state; 
     } 
    }; 

: - 예를 들어 (간단한 작업 유형에베이스는 값으로 RequestState 상수를 설정). 그건 내가 읽을 수있는 코드를 제공하고 어리석은 실수를 저 지르지 못하게한다.

팩토리는 일반적인 작업에는 좋지만 저장소의 일부를 수정해야하는 사용자 지정 동작 (작업 유형에 대해)을 추가해야 할 때 해당 작업을 처리 할 감속기의 사용자 지정 부분을 작성하고 싶습니다. 나를. 아이디어는 반복 방식으로 감속기를 구성하므로 배열의 경우 combineReducers입니다. 이렇게하면 감속기를 만드는 공장을 사용할 수 있고 특정 감속기와 결합하여 특정 작업을 처리 할 수 ​​있습니다. 배열에 대한 combineReducers은 첫 번째 배열을 호출하고 아무것도 변경되지 않았 음을 인식하고 두 번째 (사용자 정의) 배열을 호출하여 해당 배열을 처리합니다.

제가 해결책을 찾고 있었고 redux-actions을 찾았지만 동작과 감속기가 내가 익숙한 것과 약간 다른 의미를 만드는 방식을 좋아하지 않습니다. 어쩌면 나는 그것을 얻지 못할 것이지만, 결국은 감속 제가 순수한 기능으로 쓰여지는 것을보고 싶어합니다.

나는 길을 보여 줄 몇 가지 힌트를 찾고 있습니다. 어떤 종류의 고차원 감속기를 사용하고 어떤 방식 으로든 결합하는 라이브러리 또는 프로젝트가 있습니까? 위에서 설명한 것처럼 감속기를 구성하는 데 단점이 있습니까?

답변

2

은 그래, 감속기는 단지 기능을하기 때문에, 당신은 논리를 구성 할 수있는 방법의 무한한 수있다, 함께 여러 기능을 구성하는 것은 매우을 권장합니다.

찾고있는 "감속기 배열"아이디어는 https://github.com/acdlite/reduce-reducers입니다. 나는 정확하게 그 종류의 행동을 위해 내 응용 프로그램에서 자주 사용합니다. 즉, combineReducers- 생성 된 감속기를 먼저 실행 한 다음 더 구체적인 동작을 위해 감속기를 차례로 실행합니다.

감속기 로직과 관련된 여러 주제를 다루는 Structuring Reducers이라는 Redux 문서 섹션을 작성했습니다. 여기에는 일반적인 방법 인 combineReducers 이상의 유용한 패턴이 포함됩니다.

또한 Redux addons catalog의 일부로 many other reducer-related utilities의 목록이 있습니다.